Vous développez l'application ASP.Net MVC, n'est-ce pas? D'autres réponses semblent être spécifiques aux applications de bureau. Laissez-moi capturer des choses communes:
Détection de la localisation
Il est très important que votre application détecte correctement les paramètres régionaux de l'utilisateur. Dans les applications de bureau, CultureInfo.CurrentCulture contient les paramètres régionaux de mise en forme préférés (ceux qui doivent être utilisés pour formater les nombres, les dates, les devises, etc.), tandis que CultureInfo.CurrentUICulture contient les paramètres régionaux préférés de l'interface utilisateur (ceux qui doivent être utilisés pour afficher les messages localisés). . Pour les applications Web, vous devez définir les deux cultures sur auto (pour détecter automatiquement les paramètres régionaux à partir de l'en-tête AcceptLanguage), sauf si vous souhaitez implémenter un workflow de détection de paramètres régionaux sophistiqué (par exemple, prendre en charge le changement de langue à la demande).
Externaliser des chaînes
Toutes les chaînes doivent provenir de ressources, c’est-à-dire des fichiers Resx. Dans Winforms App, il est facilement réalisable en définissant la propriété de formulaire Localizable sur true. Vous auriez également besoin d'externaliser (malheureusement) manuellement les chaînes provenant de vos modèles. C'est aussi relativement simple. Dans Asp.Net, vous devez tout externaliser manuellement ...
Layouts
Vous devez absolument permettre l'expansion des chaînes. Dans le monde Winforms, il est possible d’atteindre l’aide de TableLayoutPanel, qui doit être utilisé pour s’assurer que la disposition s’ajuste automatiquement pour prendre en charge un texte plus long. Dans le monde Web, vous avez un peu de chance. Vous devrez peut-être implémenter un mécanisme de localisation CSS - un moyen de modifier (remplacer) les définitions CSS. Cela permettrait aux gens de la localisation de modifier les problèmes de style à la demande. Assurez-vous que chaque élément HTML dans la page rendue a un identifiant unique - cela permettra de le cibler avec précision.
Problèmes spécifiques à la culture
Évitez d'utiliser des graphiques, des couleurs et des sons qui pourraient être spécifiques à la culture occidentale. Si vous en avez vraiment besoin, veuillez fournir un moyen de localisation. Évitez les graphiques sensibles à la direction (cela poserait un problème lorsque vous essayez de localiser en arabe ou en hébreu). En outre, ne supposez pas que le monde entier utilise les mêmes numéros (c.-à-d. Que ce n'est pas vrai pour l'arabe).
ToString () et Parse ()
Veillez à toujours transmettre CultureInfo lorsque vous appelez ToString (), sauf si cela n'est pas pris en charge. De cette façon, vous commentez vos intentions. Par exemple: si vous utilisez un nombre en interne et que, pour une raison quelconque, vous devez le convertir en chaîne, utilisez:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Pour les numéros à afficher pour l'utilisateur:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
La même chose s'applique à Parse (), TryParse () et même à ParseExact () - certains bugs peuvent être introduits sans l'utilisation appropriée de CultureInfo. C’est parce qu’une pauvre âme de Microsoft, pleine de bonnes intentions, a décidé qu’il était judicieux de traiter CultureInfo.CurrentCulture comme celui par défaut (il serait utilisé si vous ne transmettez rien), après tout, quand quelqu'un utilise ToString ( ) il / elle veut l'afficher à l'utilisateur, non? Ce n’est pas toujours le cas - essayez par exemple de stocker le numéro de version de votre application dans une base de données, puis convertissez-le en instance de la classe Version. Bonne chance.
Dates et fuseaux horaires
Veillez à toujours stocker et instancier DateTime au format UTC (utilisez DateTime.UtcNow à la place de DateTime.Now). Convertissez-le en heure locale au format local en affichant:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Si vous devez envoyer des e-mails avec la référence de temps dans le corps, veillez à inclure les informations de fuseau horaire - incluez l'offset UTC et la liste des villes:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Messages composés
Vous avez déjà été averti de ne pas concaténer des chaînes. Au lieu de cela, vous utiliseriez probablement String.Format () comme indiqué ci-dessus. Cependant, je dois dire que vous devriez minimiser l'utilisation de messages composés. C’est parce que les règles de grammaire cible sont assez souvent différentes et que les traducteurs peuvent donc avoir besoin non seulement de réorganiser la phrase (ceci sera résolu en utilisant des espaces réservés et String.Format ()), mais également de traduire la phrase entière de manière différente en fonction de ce qui sera substitué. Laisse moi te donner quelques exemples:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Autres problèmes de concaténation
La concaténation n'est pas limitée aux chaînes. Évitez de combiner les contrôles, par exemple:
Rappelez-moi à nouveau dans [zone de texte avec numéro] jours.
Cela devrait être repensé pour ressembler à ceci: Rappelez-moi à nouveau dans ce nombre de jours: [zone de texte].
Encodage des caractères et des polices
Toujours sauvegarder, transférer, quel que soit le texte au format Unicode (c.-à-d. UTF-8). Ne codez pas les polices en dur - La localisation devra peut-être les modifier et le mécanisme de secours par défaut des polices sera désactivé (dans le cas de Winforms). N'oubliez pas d'autoriser les caractères "étranges" dans la plupart des champs (nom d'utilisateur).
Tester
Vous aurez probablement besoin d'implémenter une pseudo traduction, c'est-à-dire créer des ressources pour la culture allemande et copier vos chaînes en anglais en ajoutant un préfixe et un suffixe. Vous pouvez également utiliser des espaces réservés pour détecter facilement les chaînes composées. La pseudo-traduction a pour but de détecter les problèmes de localisation tels que les chaînes codées en dur, les problèmes de mise en page et l'utilisation excessive de messages composés.