La meilleure façon de mettre en œuvre multi-langue/de la mondialisation dans les grands .Un projet de réseau
Je vais bientôt travailler sur un grand projet c# et voudrais construire en multi-support de la langue de départ. J'ai eu un jouer et peut obtenir ce travail à l'aide d'un fichier de ressources distinct pour chaque langue, puis d'utiliser un gestionnaire de ressources de charger les chaînes.
Existe-il d'autres bonnes approches que je pouvais voir dans?
Vous devez vous connecter pour publier un commentaire.
Utiliser un autre projet avec des Ressources
Je peux dire ce à partir de l'expérience, avoir une solution actuelle avec
1224 projets qui inclut l'API, MVC, des Bibliothèques de Projet (fonctionnalités de Base), WPF et Xamarin. Il vaut la peine de lire ce long post que je pense que c'est la meilleure façon de le faire. Avec l'aide de VS outils facilement exportables et importables, envoyés à des agences de traduction ou de révision par d'autres personnes.MODIFIER 02/2018: Toujours aussi fort, en la convertissant en une .NET de la bibliothèque Standard permet également de l'utiliser partout .NET Framework et NET de Base. J'ai ajouté une section supplémentaire pour le convertir en JSON ainsi, par exemple angulaire de pouvoir l'utiliser.
EDIT: 2019: Aller de l'avant avec Xamarin, cela fonctionne encore sur toutes les plateformes. E. g. Xamarin.Les formes des conseils pour utiliser les fichiers resx ainsi. (Je n'ai pas développer une application en Xamarin.Des formes, mais la documentation, qui est la façon détaillé pour commencer, il couvre: Xamarin.Les Formes De La Documentation). Tout comme la convertir en JSON, nous pouvons aussi le convertir en .fichier xml pour Xamarin.Android (actuellement).
Donc, permet de se rendre à elle.
Pro
ResourceDirectories
.Thread.CurrentThread.CurrentCulture
Con
Installation
Créer langue de votre projet dans la solution, donnez-lui un nom comme MyProject.Langue. Ajouter un dossier à des "Ressources", et dans ce dossier, créez deux fichiers de Ressources (.resx). On appelle Ressources.resx et un autre appelé Ressources.fr.resx (ou .en-GB.resx pour certains). Dans mon application, j'ai NL (néerlandais) langue comme langue par défaut, donc, qui va dans mon premier fichier, et l'anglais va dans mon deuxième fichier.
Le programme d'installation devrait ressembler à ceci:
Les propriétés de Ressources.resx doit être:
Assurez-vous que l'outil personnalisé de l'espace de noms est mis à votre projet d'espace de noms. La raison pour cela est que, dans WPF, vous ne pouvez pas référence à
Resources
à l'intérieur de XAML.Et à l'intérieur du fichier de ressources, définir le modificateur d'accès Public:
À l'aide d'un autre projet
Référence à votre projet: un clic Droit sur Références -> Ajouter une Référence -> Prjects\Solutions.
Utilisation de l'espace de noms dans un fichier:
using MyProject.Language;
L'utiliser comme dans le back-end:
string someText = Resources.orderGeneralError;
Si il y a autre chose "Ressources", puis il suffit de mettre dans l'ensemble de l'espace de noms.
En utilisant MVC
MVC, vous pouvez faire comme vous le souhaitez pour définir la langue, mais j'ai utilisé url paramétrée, qui peut être configuré comme suit:
RouteConfig.cs
Ci-dessous les autres mappages
FilterConfig.cs (peut-être besoin d'être ajouté, le cas échéant, ajouter
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
à laApplication_start()
méthode dansGlobal.asax
LocalizationAttribute
LanguageHelper juste définit la Culture info.
Utilisation dans .cshtml
ou si vous ne voulez pas définir de l'usage puis il suffit de remplir dans l'ensemble de l'espace de noms, OU vous pouvez définir l'espace de noms sous /Vues/web.config:
Cette mvc mise en œuvre de la source de tutoriel: Génial tutoriel blog
À l'aide de bibliothèques de classes pour les modèles
Le Back-end de l'aide est le même, mais juste un exemple pour l'utilisation dans les attributs
Si vous avez de redimensionnement, il va automatiquement vérifier si le nom de la ressource existe. Si vous préférez le type de sécurité que vous pouvez utiliser T4 modèles pour générer un enum
À l'aide de WPF.
Bien sûr ajouter une référence à votre MyProject.Langue espace de noms, nous savons comment l'utiliser dans le back-end.
En XAML, à l'intérieur de l'en-tête d'une Fenêtre ou d'un UserControl, ajouter une référence d'espace de noms appelé
lang
comme suit:Puis, à l'intérieur d'un label:
Car il est fortement typé, vous êtes sûr de la chaîne de ressource existe. Vous pourriez avoir besoin de recompiler le projet parfois lors de l'installation, WPF est parfois buggy avec de nouveaux espaces de noms.
Une chose de plus pour WPF, définir la langue à l'intérieur de la
App.xaml.cs
. Vous pouvez faire votre propre mise en œuvre (à choisir lors de l'installation) ou laisser le système se décider.De l'utiliser dans Angulaire (convertir en JSON)
De nos jours, il est plus courant d'avoir un framework comme Angulaire en combinaison avec des composants, donc sans cshtml. Les traductions sont stockées dans des fichiers json, je ne vais pas couvrir comment cela fonctionne, mais si vous voulez convertir à un fichier JSON, c'est assez simple, j'utilise un modèle T4 script qui convertit les Ressources de fichier à un fichier json. Je recommande l'installation de T4 éditeur lire la syntaxe et de l'utiliser correctement car vous avez besoin de faire quelques modifications.
Seulement 1 chose à noter: Il n'est pas possible de générer les données, de les copier, de nettoyer les données et de générer pour une autre langue. Alors vous devez copier code ci-dessous autant de fois que les langues que vous avez et modifier l'entrée avant '//choix de la langue ici". Actuellement pas le temps de résoudre ce problème, mais sera probablement mise à jour plus tard (si intéressé).
Chemin: MyProject.Langue/T4/CreateWebshopLocalizationEN.tt
Là vous allez, vous pouvez maintenant utiliser un seul fichier de ressource pour tous vos projets. Cela rend très facile l'exportation de tout à l'excl document et de laisser à quelqu'un de le traduire et de l'importer à nouveau.
Caliburn.Micro
qui applique à la re-configuration de l'amorçage conteneur pendant le changement de langue (mais aussi à première vue). Il fait juste efface le cache de sorte que lorsqu'une vue est chargée, elle aura à charge les propriétés de toute façon. Je conseille à la recherche d'un viewmodel d'actualisation du cache (totalité de l'app) et lors de changement de la langue de masquer le reste de la vue. J'espère que cela aide!J'ai vu les projets mis en œuvre à l'aide d'un certain nombre d'approches différentes, chacun ont leurs avantages et leurs inconvénients.
Je dirais que la méthode que vous avez choisi fait beaucoup de sens. Il serait intéressant de voir les réponses des autres trop que je me demande souvent si il ya une meilleure façon de faire des choses comme cela. J'ai vu de nombreuses ressources que tous les points à l'aide des ressources de la méthode, y compris une ici sur DONC.
Je ne pense pas qu'il ya une "meilleure façon". Il va vraiment dépendre sur les technologies et le type d'application que vous créez.
Webapps pouvez enregistrer les informations dans la base de données que d'autres affiches ont suggéré, mais je recommande l'utilisation de séparer les fichiers de ressources. C'est fichiers de ressources séparé de votre source. Séparer les fichiers de ressources, réduit les conflits pour les mêmes fichiers, et que votre projet grandit, vous pouvez trouver la localisation sera fait separemment de la logique métier. (Les programmeurs et les Traducteurs).
Microsoft WinForm et WPF gourous recommandons l'utilisation séparée des ressources assemblys personnalisés pour chaque locale.
WPF capacité de la taille des éléments de l'INTERFACE utilisateur de contenu abaisse la mise en page de travail nécessaire, par exemple: (les mots japonais sont beaucoup plus courtes que l'anglais).
Si vous envisagez de WPF: Je suggère la lecture de cet article msdn
Pour être honnête, j'ai trouvé le WPF outils de localisation: msbuild, locbaml, (et peut-être une feuille de calcul excel) fastidieuse à utiliser, mais il fonctionne.
Quelque chose de légèrement connexes: Un problème commun que je face de l'intégration de systèmes legacy qui envoient des messages d'erreur (généralement en anglais), pas de codes d'erreur. Ceci oblige les changements apportés aux systèmes hérités, ou la cartographie backend chaînes à mes propres codes d'erreur et puis pour les chaînes localisées...yech. Les codes d'erreur sont les localisations ami
+1 Base de données
Formes dans votre application peut même re-traduire eux-mêmes à la volée si des corrections sont apportées à la base de données.
Nous avons utilisé un système où tous les contrôles ont été cartographiés dans un fichier XML (une par formulaire) à la langue Id de ressource, mais tous les Id ont été à la base de données.
En gros, au lieu d'avoir chaque contrôle de tenir l'ID (mise en place d'une interface, ou à l'aide de la propriété tag en VB6), nous avons utilisé le fait que dans .NET, le contrôle de l'arbre était facilement détectable par la réflexion. Un processus lorsque le formulaire est chargé de réaliser le fichier XML si c'était manquant. Le fichier XML définir les contrôles à leurs Id de ressource, donc ce tout simplement besoin d'être rempli et mappé à la base de données. Cela signifie qu'il n'y a pas besoin de changer le binaire compilé si quelque chose n'a pas été marqué, ou si elle devait être fendu pour une autre ID (quelques mots en anglais qui peut être utilisé comme les noms et les verbes peuvent avoir besoin de traduire les deux mots dans le dictionnaire et ne pas être ré-utilisé, mais vous pourriez ne pas découvrir ce lors de la première cession de l'Id). Mais le fait est que l'ensemble du processus de traduction devient complètement indépendante de votre binaire (chaque formulaire doit hériter d'une forme de base qui sait comment traduire lui-même et tous ses contrôles).
Les seules où l'application se prend au jeu, c'est quand une phase avec des points d'insertion est utilisé.
La base de données, logiciel de traduction a été votre CRUD de base d'entretien de l'écran avec diverses options de flux de travail pour faciliter passant par les traductions manquantes, etc.
J'irais avec la plusieurs fichiers de ressources. Il ne devrait pas être difficile à configurer.
En fait, j'ai récemment répondu à une question similaire sur la configuration d'un langage basé sur des fichiers de ressources en conjonction avec la forme de fichiers de ressources de langue.
Localisation dans Visual Studio 2008
Je considère que la meilleure approche à moins de WinForm développement.
Vous pouvez utiliser des outils comme Sisulizer. Il va créer l'assemblage de satellites pour chaque langue. Seule chose que vous devez faire attention est de ne pas obscurcir la forme des noms de classe (si vous utilisez obfuscator).
Ive été la recherche et j'ai trouvé ceci:
Si votre utilisation de WPF ou Silverlight votre approche pourrait être d'utiliser WPF LocalizationExtension pour de nombreuses raisons.
Ses Open Source
C'est GRATUIT (et restera gratuit)
est dans un vrai stabel état
Dans une Application Windows, vous pourriez faire quelque chose comme ceci:
Et je pense que sur une Page Wep l'arrivée pourrait être le même.
Bonne Chance!
La plupart des projets opensource utilisation GetText à cette fin. Je ne sais pas comment et si il ne l'a jamais été utilisé sur un .Net du projet avant de.
Nous utilisons un fournisseur personnalisé pour support multi-langue et de mettre tous les textes dans une table de base de données. Il fonctionne bien sauf que nous sont parfois confrontés à des problèmes de mise en cache lors de la mise à jour des textes dans la base de données sans la mise à jour de l'application web.
Standard, les fichiers de ressources sont plus faciles. Toutefois, si vous avez n'importe quelle langue dépendante des données telles que des tables de recherche, alors vous aurez à gérer les deux ensembles de ressources.
Je ne l'ai pas fait, mais dans mon prochain projet, je voudrais mettre en œuvre une base de données de fournisseur de ressources. J'ai trouvé comment le faire sur MSDN:
http://msdn.microsoft.com/en-us/library/aa905797.aspx
J'ai aussi trouvé cette mise en œuvre:
DBResource Fournisseur