Est-ce que l'ajout de chaînes de caractères avec des espaces (`{0}`) dans les ressources est une bonne idée?

j'ai ajouté une chaîne de caractères dans un fichier de ressources. Ma demande sera localisée.

Mais, est d'ajouter des chaînes avec des espaces ({0}) en ressources, une bonne idée?

Que se passe-t-il si une personne non technique fait de la localisation? Est-il un moyen pour lui de le visser en place, sans le savoir?

Si ce n'est pas une bonne idée, que dois-je faire?

Ici est simple exemple. Je vais être en utilisant WPF dictionnaires de ressources.

Exemple:

// Resource1.resx
//        Name               |            Value
//---------------------------------------------------------------
// RELATIONSHIP_STATUS_MSG   | {0} is in relationship with {1}. 
//


class Program
{
    static void Main(string[] args)
    {
        string msg = string.Format(Resource1.RELATIONSHIP_STATUS_MSG, 
                                   "Romeo", "Juliot");
        Console.WriteLine(msg);
    }
}
24
demandé sur Pratik Deoghare 2011-05-25 13:48:48
la source

8 ответов

eh Bien, je crois que c'est une bonne idée parce que c'est un moyen facile et rapide de rendu paramétrées et les chaînes localisées.

au fait, comme vous le dites dans votre question, les non-techniciens peuvent briser vos chaînes de localisation parce qu'ils ne comprennent pas ce qu'est "{0}". J'ai deux "approches" pour résoudre ce problème

  1. il suffit de noter que les personnes non-tech maintenant des chaînes localisées qu'ils ne doivent pas prendre soin de texte dans support.

  2. utilisez les paramètres nommés: "{some-identifier} " et utilisez juste someTextResource.Replace("{some-identifier}", someTextVar).

environ 2nd one, Vous pouvez implémenter une méthode acceptant un IDictionary<TKey, TValue> exemple de relations de substitution, où la clé est l'identifiant à remplacer, et valeur le texte à mettre remplaçant l'identifiant.

14
répondu Matías Fidemraizer 2012-10-01 11:19:01
la source

cela dépend.

Parfois, vous n'avez pas d'autre choix que d'utiliser les espaces réservés, par exemple pour les données dynamiques. Dans ce cas, en utilisant des espaces réservés, en particulier numérotés ({0}, {1}, ...) n'est pas seulement la bonne idée mais l'idée la plus acceptable du point de vue de l'internationalisation. Il permet de réordonner la phrase pendant la traduction, ce qui est certainement quelque chose que vous voulez soutenir.

En ce qui concerne les personnes non techniques... Eh bien, si vous êtes en utilisant le fournisseur de traduction de logiciel professionnel, il n'y aura pas de problème pour eux, ils sont juste utilisés pour traduire des chaînes comme cela. Si vous voulez nommer des services de traducteur juste générique, il pourrait poser problème. Mais dans ce cas, je dois vous avertir que les traductions techniques sont certains: les traducteurs doivent au moins obéir aux termes courants du glossaire du logiciel.

OK, maintenant sur pourquoi ça dépend. Essentiellement, le formatage les chaînes avec de la ficelle.Format () est en fait concaténation. Comme je l'ai dit, si vous avez des données dynamiques, vous n'avez pas le choix. Mais si vos données sont statiques, et que vous n'avez que quelques combinaisons, vous ne devriez jamais, en aucun cas, utiliser des placeholders (ni simple string concatenations avec l'opérateur concatenation ( + ), ni plus compliqué avec StringBuilder). Pour les données statiques, vous devez simplement créer autant de chaînes que nécessaire.

La véritable raison en est que de nombreuses langues ont besoin de formes différentes de traduction en fonction du contexte. Par exemple, dans ma langue maternelle (le Polonais), nous utilisons différentes formes de noms féminins et masculins.

Ce n'est pas seulement un problème théorique: il y a 4 ans, lorsque je travaillais sur la localisation, nous avons dû localiser un nouveau logiciel antivirus majeur. Le problème, c'est que certains programmeurs ont optimisé les ressources, de sorte que nous avons eu un message similaire à celui-ci:

The {0} is inactive. To activate {0} click...

ce qui a été substitué à placeholder, était le nom de la fonction ou du programme. Dans Polonais fonction est féminin, par programme est masculin. Pour empirer les choses, notre linguiste a voulu ajouter des mots "programme" et "funkcja", en fonction de ce qui était réellement inactif.

De toute évidence, nous (les ingénieurs logiciels de localisation) n'avons pas pu régler le problème sans toucher au code (ce que nous n'avions pas le droit de faire, mais c'est une autre histoire...).

Pour résumer:

Utiliser des espaces réservés si vous devez vraiment. L'espace disque n'est pas cher. Éviter les concaténations (comme cela ne permettra pas de réordonner la phrase traduite).

Ne vous inquiétez pas trop sur le traducteur, mais rappelez-vous de leur donner le contexte (éventuellement aussi des instructions). Il est important pour eux de savoir votre chaîne sera affichée et sont des valeurs possibles.

6
répondu Paweł Dyda 2011-05-25 23:45:42
la source

Si vous faites cela, assurez-vous de documenter le comportement de non-traducteurs techniques. Sinon, vous devriez être bien.

3
répondu Erno de Weerd 2011-05-25 13:52:18
la source

bien que vous fournissiez un document pour les traducteurs non-techniques, il y a encore des chances qu'ils puissent l'exploiter(sans le savoir), cela ne poserait pas de problème si vous vous occupiez d'un tel cas par vous-même. Je préférerais concaténer la corde.

0
répondu crypted 2011-05-25 13:58:24
la source

C'est l'approche recommandée, je pense. Les lignes directrices pour GNU GetText suggèrent de le faire par exemple.

comme le commente Erno, assurez-vous que celui qui fait la traduction sait ce que représente le {0}.

un avantage de cette approche est que vous pouvez contrôler où les valeurs sont insérées et une partie des valeurs formatées aussi bien. La chose vous manque, c'est la pluralisation des valeurs, mais c'est un autre débat.

0
répondu Rune Grimstad 2011-05-25 13:59:11
la source

utiliser des tests automatisés pour vérifier l'intégrité des fichiers de ressources retournés par les fournisseurs de traduction. Idéalement, fournir aux vendeurs des outils qui font cela pendant le temps de traduction pour détecter les défauts le plus tôt possible.

0
répondu McDowell 2011-05-25 14:10:05
la source

je trouve habituellement un schéma de nommage pour ces chaînes de caractères afin qu'elles ressortent en code.

Comme Des Cordes.RELATIONSHIP_STATUS_MSG_FORMAT

0
répondu cbuteau 2014-02-21 19:19:25
la source

j'aime Resharper de nommage de conventtion: __0__is_in_relationship_with__1__

indique clairement quels arguments sont attendus lorsqu'ils sont utilisés à partir du code:

string msg = string.Format(Properties.Resources.__0__is_in_relationship_with__1__,
                           "Romeo", 
                           "Juliet");
0
répondu Johan Larsson 2015-10-22 02:13:24
la source

Autres questions sur