J'aimerais savoir quelle est la bonne façon de gérer l'internationalisation des déclarations avec des données d'exécution ajoutées. Par exemple 1) Votre entrée "xyz" est excellente! 2) Vous étiez "4 ans" au-delà de "Barney and Freinds" à "Spongebob". P>
Les valeurs cotées doubles sont des données utilisateur obtenues ou calculées au moment de l'exécution. Mes plates-formes sont principalement Java / Android. Une solution de bonne solution pour les langues occidentales est préférée plus faible universelle. p>
3 Réponses :
Pour récupérer du texte localisé (Messages), utilisez le java.util.resourcebundle code>
API. Pour formater des messages, utilisez java.text. MessageFormat code>
API. P>
Fondamentalement, créez d'abord un fichier de propriétés comme: p> puis chargez-le comme suit: P> {n} code> Les choses sont des espaces réservés pour les arguments comme vous le pouvez Passez par
MessageFormat # Format () CODE>
. P> String formattedKey1 = MessageFormat.format(key1, "xyz");
String formattedKey2 = MessageFormat.format(key2, "4 years", "Barney and Friends", "Spongebob");
Pour être clair: vous fourniriez la chaîne votre entrée '{0}' est excellente " code> à vos traducteurs et transmettez la traduction (stockée dans la référence
de ressources code> sur
sur
MessageFormat code>, qui remplacera ensuite
{0} code> avec le contenu que vous fournissez.
Le moyen suggéré de le faire sur Android est de faire ce que Balusc a suggéré et placer les chaînes dans les fichiers res / valeurs-xx / strings.xml. Mais au lieu d'utiliser {0}, vous pouvez utiliser la version de context.GetString () qui prend une chaîne de format. (Voir d.android.com/reference/android/content/context.html < / a>) Il faut les chaînes de style de style Java standard. Votre valeur ressemblerait donc à "votre entrée"% 1 $ s 'est excellente "
une considération non technique. L'intégration des données gratuites à l'intérieur des phrases anglaises ne va pas sembler très lisse dans de nombreuses cultures (y compris les occidentaux), où vous avez besoin d'un accord grammatical sur E.G. nombre, sexe ou cas. Un style plus télégraphique aide généralement (par exemple une excellente entrée: "xyz") - puis au moins tout le monde obtient le même niveau de clunkiness! p>
Ceci est un problème non-problème si vous utilisez des espaces réservés paramétrés. Vous pouvez la positionner grammaticalement partout où vous voulez.
Je ne pense pas que tu vois ce que j'arrive. La grammaire anglaise est simple par rapport à la plupart des langues occidentales (et autres). Lorsque vous écrivez des modèles de chaîne en anglais, vous MAI B> N'oubliez pas de fournir des suppléants pour les singuliers et les pluriels ("{0} est ..." vs "{0} sont ..."), mais vous êtes ne sera toujours pas capable de rencontrer des contraintes sur quel mot formes à utiliser pour différents genoux ou cas parmi les noms, pour commencer b>. C'est quelque chose à garder à l'esprit lors de la rédaction des textes originaux anglais: aussi télégraphique que possible, afin d'éviter que les traductions audio trop b> dérangées.
BTW, @Balusc, votre réponse est tout à fait correcte et le meilleur que nous puissions faire de manière réaliste. Je suggère simplement que par Aussi B> Travailler sur le phrasé anglaise, l'application peut apporter une impression légèrement plus professionnelle dans ses variantes localisées.
Je vois ce que tu veux dire. C'est en effet quelque chose à prendre en compte attentivement.
Un excellent point. Considérons "j'aime mon {animal de compagnie {animal}" et "mon {animal de compagnie m'aime". En anglais si je substitue "chien" pour "{PET}", les deux phrases fonctionnent bien. Mais si, dis, j'essaie de le faire en latin et de substituer "Canis" dans "Amo {Pet} Mei" et "{PET} MEUM AMAT" ... bien "Canis" est la forme de sujet, la deuxième phrase Travailler bien. Mais dans la première phrase, nous obtenons "Amo Canis Mei". "Canis" est toujours la forme du sujet, alors cela se traduirait par quelque chose comme "I, un chien, un amour". Nous voudrions vraiment le changer sur le formulaire d'objet, "Canem". Ce n'est pas facile à faire avec un modèle.
Je pense que l'on devra probablement définir une chaîne de format pour inclure une fonctionnalité "1-N", de préférence définie de manière à faciliter les cas communs (par exemple, pluries). Par exemple, définissez {0 # string1 / string2 / string3} à la sortie String1 Si le paramètre 0 est zéro ou moins, String2 si c'est précisément 1, et String3 s'il est supérieur à 1}. Ensuite, on pourrait dire "vous avez {0} {0 # couteaux / couteaux / couteaux} dans le tiroir." P>
Au moins, pour les langues d'Europe occidentale, je ne pense pas que Dualis est nécessaire ... (vient entre singulier et pluriel, pour deux objets!).