fichier "Localizable.strings"

macvelottemacvelotte Membre
00:05 modifié dans API AppKit #1
J'essaie de faire une application bilingue ; je suis pour cela le chapitre 11 de "Cocoa par la pratique lequel est écrit pour "project Builder" ; je travaille avec XCode, et ça ne marche pas ...
Quelle est la bonne procédure ??
«1

Réponses

  • fouffouf Membre
    00:05 modifié #2
    Ou est ton fichier "Localizable.strings" ? Et puis si tu pouvais nous donner plus d'infos, ca serait bien.
  • macvelottemacvelotte Membre
    00:05 modifié #3
    Je crée un fichier vide 'empty file) que j'enregistre dans French.lproj sous le nom Localizable.strings.

    Dans mon code qui contient les strings à  traduire, je suppose que je dois mettre ces chaà®nes en anglais ???

    Et, ce que je n'arrive pas à  faire, c'est la verrsion "english" des localizable.strings.
  • fouffouf Membre
    00:05 modifié #4
    Dans XCode, tu selectionnes le fichier en question, tu fais Get Info et tu cliques sur Add Localisation et tu ajoutes la localisation dans la langue que tu veux.
  • VeillardVeillard Membre
    00:05 modifié #5
    N'oublie pas l'encodage UTF-8 si tu veux garder les accents.
  • macvelottemacvelotte Membre
    00:05 modifié #6
    Mes tentatives sont vouées à  l'échec : voici le message obtenu ous Xcode à  la création du fichier Localizable.strings (en pièce jointe).

    Le fichier se crée quand même, mais impossible d'obtenir deux versions (English et French).

    [Fichier joint supprimé par l'administrateur]
  • VeillardVeillard Membre
    00:05 modifié #7
    Essaie de déplacer ce fichier et d'en recréer un par Xcode. Tu pourras ensuite recopier le contenu de l'ancien fichier dans le nouveau. Le nouveau fichier ne sera pas localisé. Une fois que c'est fait, la localisation par défaut sera "english" puis il ne te restera plus qu'à  le localiser en français.

    bon courage.
  • macvelottemacvelotte Membre
    00:05 modifié #8
    Oui, Favouille, je n'ai pas suivi "Cocoa par la Pratique" et j'ai fait mes deux fichiers English et French ...

    Pour l'instant, il me reste à  prévenir mon application de l'existence de ces fichier ...
  • VeillardVeillard Membre
    00:05 modifié #9
    Le plus simple pour prévenir ton appli est d'inclure tes fichiers dans ton projet par : Projerct > Add to Project.
  • macvelottemacvelotte Membre
    00:05 modifié #10
    Add to Project .. : oui ; mais apparamment, ça ne suffit pas (seul le fichier nib répond bien présent à  la langue prioritaire).

    LA doc Xcode est illisible ...

    Tout me paraà®t hermétique ???
  • VeillardVeillard Membre
    00:05 modifié #11
    Tu as bien ton fichier dans Xcode mais sans langue prioritaire ?
    Dons tu sélectionnes le fichier, puis tu fais "pomme-I" pour lire les infos et tu cliques sur "make localizable". Cette manip va dans un premier temps localiser ton fichier en anglais.
    Au fait, dans le finder, je mets le fichier non localisé dans la racine de mon répertoire.

    Voilà  essaie pour voir
  • macvelottemacvelotte Membre
    00:05 modifié #12
    merci, favouille, mais "make localizable" est introuvable !
  • macvelottemacvelotte Membre
    00:05 modifié #13
    touvé "Make Localizable" dans le menu File de Xcode : mais la commande reste grisée
    ... et ça me grise !!!
  • macvelottemacvelotte Membre
    00:05 modifié #14
    suite ...

    Je n'ai pas compris "le fichier à  la racine ..;" ; quel fichier ?

    voici la fenêtre de mon application dans Xcode .

    [Fichier joint supprimé par l'administrateur]
  • VeillardVeillard Membre
    avril 2005 modifié #15
    Apparemment, tes fichiers sont déjà  localisés. Dans le Finder, "English.lproj" et "French.lproj" doivent contenir chacun un exemplaire de ton fichier.

    En ce qui concerne la "racine" j'ai un exemple de fichier non localisé "Carnet.strings" voir la copie d'écran.




    [Fichier joint supprimé par l'administrateur]
  • VeillardVeillard Membre
    00:05 modifié #16
    Après localisation, ça devrait donner ceci dans Xcode :

    [Fichier joint supprimé par l'administrateur]
  • VeillardVeillard Membre
    00:05 modifié #17
    Avec afficher les infos, est-ce que tu as quelque chose comme ceci ?

    [Fichier joint supprimé par l'administrateur]
  • macvelottemacvelotte Membre
    00:05 modifié #18
    Les fichiers sont où il faut : mais qu'est-ce que le fichier "carnet.strings" et "main.strings" ???
  • fouffouf Membre
    00:05 modifié #19
    Je ne connais pas l'architecture du projet de Favouille, mais sache que l'on peut mettre plusieurs fichiers de localisations dans le même projet. Et on est pas obligé de les appelés Localizable. carnet.strings et main.strings sont surement les noms de ces autres fichiers (je me trompe Favouille ?). Voili voilou.
  • VeillardVeillard Membre
    00:05 modifié #20
    C'est tout à  fait ça. Pour éviter de faire un gros fichier, j'en ai fait plusieurs petits (un par thème). On peut leur donner le nom que l'on veut à  condition que le suffixe du fichier soit ".strings".

    Exemple d'utilisation du fichier "Main.strings" :
    [[NSBundle mainBundle] localizedStringForKey:@"Attention" value:@"error !" table:@"Main"]
    


    et pour "Carnet.strings"
    [[NSBundle mainBundle] localizedStringForKey:@"Helium percent" value:@"error !" table:@"Carnet"]
    
  • avril 2005 modifié #21
    Tu peux aussi utiliser des fonctions qui font exactement la même chose:
    NSLocalizedString(NSString *key, NSString *comment) //Celle qu&#39;on donne par défaut<br />NSLocalizedStringFromTable(NSString *key, NSString *tableName, NSString *comment) <br />NSLocalizedStringFromTableInBundle(NSString *key, NSString *tableName, NSBundle *bundle, NSString *comment)
    


    Favouille: pour value, plutôt que de mettre error, il vaut mieux mettre la traduction anglaise. Sachant que c'est cette expression qui sera utilisée si le Localizable.strings ne contient pas la traduction, cela te dispense de maintenir un Localizable.strings en anglais. C'est d'ailleurs de cette manière que les fonctions citées au dessus "fonctionnent". Elles invoquent les messages de NSBundle en utilisant key pour les 2 premiers arguments.
  • macvelottemacvelotte Membre
    00:05 modifié #22
    à  Renaud et Favouille ...

    Je suis toujours dans l'expectative pour informer mon application de l'existence de fichiers Localizable.strings ..

    Faut-il que les strings par défaut soient en anglais ? (j'entends par défaut celles qui figurent dans le code) ?

    Jusqu'à  maintenant, rien ne se passe quand je change la préférence de langue.
  • 00:05 modifié #23
    Une string est une string, l'ordi est incapable de faire la différence entre une phrase écrite en français ou une en anglais. Ceci dit, si tu es de ceux qui ne maintiennent pas de version anglaise de leur soft, tu peux les mettre en français, sans passer par les fonctions citées plus haut. Mais par contre le jour où tu auras à  créer une autre langue, tu vas t'amuser, ou bien faire un Localizable.strings qui donnent les phrases anglaises (ou autre) à  partir des françaises. Ce n'est pas ce qui se fait habituellement, mais ça fonctionne.

    Sinon pour ajouter ton fichier, essaye comme suit: retire le de ton projet (efface uniquement la référence, pas le fichier), déplace dans le English.lproj (ou French.lproj) de ton projet puis fait un Add To Project, il devrait alors être ajouté correctement (fait pareil pour celui dans l'autre langue).
  • VeillardVeillard Membre
    00:05 modifié #24
    dans 1113730028:

    Favouille: pour value, plutôt que de mettre error, il vaut mieux mettre la traduction anglaise. Sachant que c'est cette expression qui sera utilisée si le Localizable.strings ne contient pas la traduction, cela te dispense de maintenir un Localizable.strings en anglais. C'est d'ailleurs de cette manière que les fonctions citées au dessus "fonctionnent". Elles invoquent les messages de NSBundle en utilisant key pour les 2 premiers arguments.


    J'avais utilisé "error" pour mettre en évidence un oubli de traduction. C'est vrai qu'à  terme, je pense mettre les bonnes valeurs.

    @macvelotte : comment changes-tu tes préférences de langue ? Est-ce que tu passes par ceci :

    [Fichier joint supprimé par l'administrateur]
  • macvelottemacvelotte Membre
    00:05 modifié #25
    Favouille, le panneau informations a effectivement l'allure que tu indiques (avec 2 lanques cochées, english et french).

    Mais je ne comprends pas le code à  introduire pour qu'il y ait choix de la langue dans les Localizable.strings
  • VeillardVeillard Membre
    00:05 modifié #26
    Le code est unique. C'est ton application qui charge le ".lproj" correspondant à  la localisation en cours. Par exemple, si tu veux l'anglais, tu décoches le français et tu lances ton appli. Elle doit fonctionner en anglais. Si toutes les cases sont cochées, l'appli va vérifier la localisation de MacOS X sur le Mac avant de choisir le ".lproj" à  charger.
  • macvelottemacvelotte Membre
    00:05 modifié #27
    OK, l'application choisit le .lprojet convenable ; mais, dans le code source, quelle doit être la langue pour les strings ?
  • VeillardVeillard Membre
    00:05 modifié #28
    Dans ton code, tu peux écrire ceci :

    [[NSBundle mainBundle] localizedStringForKey:@&quot;Attention&quot; value:@&quot;Message par défaut&quot; table:@&quot;Main&quot;]
    


    dans ton ".string", il faudra écrire :
    "Attention" = "Attenzione"; pour la version italienne (fichier "main.strings" dans italian.lproj)
    "Attention" = "Achtung"; pour la vversion allemande (fichier "main.strings" dans german.lproj) etc...

    Donc pour chaque fichier localisé il faudra définir une paire de clés/valeurs.
  • macvelottemacvelotte Membre
    00:05 modifié #29
    Je suis bouché !!!

    J'ai, dans mon code, les quatre "strings" suivantes :

    "nord", "sud", "est","ouest" ;
    je veux les remplacer par "north", "sud", "east", west".

    dois-je écrire dans le code source les mots anglais ?

    Je n'ai absolument rien compris (merci pour vos explications ...) ni ici ni dans "cocoa par la pratique".
  • 00:05 modifié #30
    L'ordi se fout de la langue dans laquelle c'est écrit dans le code, il ne le sais pas (enfin pas tant que ça, car si tu mets du chinois, il y a un problème d'encodage, vu que par défaut le code est encodé en MacOS Roman, les .strings en UTF8), tout ce qu'il faut c'est qu'il y ait une correspondance entre ce que tu mets dans le code et la première clé dans une ligne. Donc si tu mets NSLocalizedString(@xxxx,nil); il faut qu'il y ait une ligne dans un Localizable.strings qui la structure suivante:
    "xxxx" = "Une phrase qui a un sens.";

    donc dans ton cas, tu dois avoir
    "nord" = "North";
    "sud" = "South";
    "est" = "East";
    "ouest = "West";
    (les points cardinaux prennent toujours une majuscule en anglais) si dans ton code tu as NSLocalizedString(@nord,nil); ...
  • macvelottemacvelotte Membre
    00:05 modifié #31
    Bon, j'abandonne ! Je ne vois pas du tout ce que je dois écrire, ni à  quel endroit pour que ça marche !

    Merci à  tous !
Connectez-vous ou Inscrivez-vous pour répondre.