Multilingue MVC 4
Je suis en création d'une nouvelle application dès maintenant et je souhaite faire tous les, dès le début afin que je puisse grandir avec elle dans l'avenir.
J'ai regardé sur plusieurs guides descibing comment faire un multilingue d'applications pris en charge, mais je ne peux pas comprendre sorcière à utiliser.
Certains tutoriels sont vieux et je ne sais pas si ils sont hors de date.
http://www.codeproject.com/Articles/352583/Localization-in-ASP-NET-MVC-with-Griffin-MvcContri
http://geekswithblogs.net/shaunxu/archive/2012/09/04/localization-in-asp.net-mvc-ndash-upgraded.aspx
http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx
http://www.chambaud.com/2013/02/27/localization-in-asp-net-mvc-4/
https://github.com/turquoiseowl/i18n
J'ai trouvé qu'ils sont 2 façons de stocker les données sur la langue, que ce soit dans la bd ou dans les fichiers de ressources.
Quelles sont les pro/cons?
Est-il une autre voie qui est privilégiée?
C'est ce que je veux:
- Facile à entretenir (Ajouter/Modifier/Supprimer)
- Complète de la langue. (points de vue, les devises, l'heure, la date, jquery, annotations et ainsi de suite..)
- Permettre de changer la langue.
- Détection automatique de la langue.
- La sécurité Future.
Quelle est la préférée façon de faire cela? vous avez tout bon tutoriel qui sont les meilleures pratiques pour 2013?
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un billet de blog convering l'aspect suivant de multilingue asp.net mvc application:
Base de données: je divise le tableau en deux parties, l'une contenant de la non-traduisible champs de l'autre contenant les champs qui ont besoin de traduction.
Url Routes: j'ai l'habitude de garder la culture dans l'URL de cette façon, vous obtenez un bien indexé ML site.
À partir d'une base de contrôleur de classe, vous pouvez faire que {lang} les paramètres disponibles pour votre Contrôleur. Voir le blog pour tous les détails.
L'interrogation des données: il Vous suffit de passer à la Culture de votre dépôt ou de la base de données de contexte. L'idée est de créer un modèle de vue que de fusionner les deux de la table que vous avez séparées pour la traduction.
Votre point de Vue: Utiliser le .Ressources NETTES fichier avec le générique de langue à deux lettres du code, ex: page d'Accueil.fr.resx, la page d'Accueil.fr.resx. La locale fr**-NOUS**, en**-CA** est utile pour la mise en forme de la monnaie, des dates, des chiffres, etc. Vos Ressources fichier pourra vraisemblablement être la même pour l'anglais (états-unis, le Canada, etc.
Images: Utiliser un format comme imagename-fr.png, imagename-fr.png. De votre point de Vue faire de l' {lang} paramètre de route disponible via une méthode d'extension et d'afficher vos images comme ceci:
Vous pouvez également avoir un complet dossier distinct pour votre langue prise en charge. Exemple: /content/fr/nomimage.png, /content/fr/nomimage.png.
JavaScript:: j'ai l'habitude de créer un nom de dossier LanguagePacks et JS fichiers appelés Lang-en.js, Lang-fr.js. L'idée est de créer des "statique" de classe que vous pouvez utiliser sur vos autres fichiers JS:
Sur votre point de Vue, vous charger le bon fichier de Langue
À partir d'un module JavaScript
Il n'y a pas une façon de faire un web multilingue app. Utiliser les Ressources pour traduire votre texte, ils peuvent être rapidement swap au moment de l'exécution. Vous disposez de plusieurs éditeur qui peut s'ouvrir à ceux que vous pouvez passer traducteur etc.
Vous pouvez consulter le blog et d'obtenir un exemple détaillé sur la façon dont je le fais.
J'ai une approche de moi-même sur db, cependant, il peut ne pas être adapté pour les grandes applications.
- Je créer un
Translation
de table/de l'entité pour la détention de titres et les textes qui doivent être multilingues.Donc, chaque fois que je veux rendre un avis, j'ai d'abord récupérer la traduction appropriée à partir de db et puis la passer à la vue comme modèle:
Et en vue de rendre le contenu comme suit:
Et sur l'obtention de la bonne réponse, vous avez plusieurs façons. Vous pouvez utiliser de la session:
Ou par son passage au travers de la chaîne de requête, ou une combinaison d'entre eux.
Pour la détection auto de la langue, vous devez décider des opérations suivantes:
a) de la Détection du navigateur
b) la Détection d'IP de l'utilisateur et de deviner la localisation géographique de lui et le réglage de la langue appropriée pour lui/elle
J'ai un peu l'impression que cette question n'a pas de droit de l'avant de répondre. Pour la mise en forme et ce n'est pas vous devriez toujours être en utilisant les
Culture
et laUICulture
c'est à dire des trucs comme "en-GB" pour l'anglais Britannique et "en-US" pour NOUS, l'anglais (et oui, il y a une différence). Tous les .Net est construite autour d'elle, et de cette façon vous pouvez utiliser la mise en forme locale sans vraiment y penser.Vous devriez également vérifier le Système.La mondialisation de l'espace de noms pour plus de détails:
http://msdn.microsoft.com/en-us/library/system.globalization%28v=vs.110%29.aspx
Comme pour ont été la culture devrait venir des, tout au moins dans notre société, la politique a toujours, sans exception, à partir de la chaîne de requête. La raison pour cela est que si vous utilisez IP de localisation par exemple, si un utilisateur espagnole est à la recherche à un site espagnol, au Japon et serait passé à la version Japonaise, pas tout à fait tort, mais peut être gênant si vous avez dit au client que c'est un espagnol lien ou quelque chose. Cela dit si la culture n'est pas défini dans la chaîne de requête, puis à l'aide de la propriété intellectuelle pour obtenir le deviner avec la langue que l'utilisateur souhaite avoir, ne serait pas une mauvaise idée, mais dépend vraiment de vos besoins des clients.
Que pour mettre les traductions, alors ça dépend vraiment, à la fois ressource et DB ont leurs hauts et leurs bas. De sorte que la majeure points pour les DB sont que, son facile à partager entre les applications et si vous avez besoin de mettre à jour une phrase pour une raison quelconque, vous pouvez les mettre à jour par l'intermédiaire d'une DB d'entrée, mais cela peut être un défaut, parce que certaines phrases à double sens et peut être traduit de façon totalement différente dans d'autres langues, bien que la même phrase est utilisée en anglais. L'autre gros problème avec la DB, c'est que, à un certain degré (mais cela dépend de la mise en œuvre), vous perdez de l'intelligence dans VS pour les phrases.
Ressources ont bien sûr des bon l'intelligence, mais ils sont relativement statiques à cette application web que vous utilisez, vous ne pouvez pas partager des ressources entre les applications... eh bien pas exactement vrai, mais plus ou moins, vous ne pouvez pas. Bien que la nature statique est un plus aussi, parce que toutes les ressources sont contenues dans l'application et vous savez qu'aucun effet externe peut l'influencer.
En réalité, cela dépend vraiment sur le projet en main. vous avez simplement à la manière de vos propres avantages et inconvénients et décider pour vous même... désolé. Mais si elle aide à tous, je peux vous dire comment les choses sont dans mon entreprise. Nous faisons plusieurs applications, qui partagent les mêmes phrases toutes en travers de diverses applications web. Nous avons utilisé l'avoir dans DBs, mais ce qui s'est passé est que les traductions continué de tableau, ce qui signifie un client a demandé une meilleure traduction en espagnol pour une application, mais qui n'a pas de sens, afin que jamais sur les autres. C'est arrivé plus que vous ne le pensez. Puis nous avons déménagé dans les ressources, mais ce qui s'est passé il n'y a que quand une application de traduction a été mis à jour, alors que personne ne se souvenait de mettre à jour les autres applications et il s'est réellement passé que 3 applications différentes traduit la même durée de 3 manières différentes. En fin de compte, nous avons décidé de revenir à la bd, parce que la possibilité de modifier l'ensemble des traductions à la fois plus nombreux à nous dire, alors le fait pas en dehors de l'influence pourrait effet.
En général, il y a d'autres avantages et les inconvénients, mais tout ce qui est assez hors de propos par rapport à la ci-dessus. Vous avez vraiment besoin de vous demander comment vous utilisez les traductions. Comme pour l'édition générale (à l'exclusion du point ci-dessus), puis complice approche fonctionne tout aussi bien, vous pouvez facilement changer et de modifier ou de prolonger des traductions avec les deux approches.
Cela dit, si la DB et DB les appels sont mal conçus, puis l'ajout de nouvelles langues peut être plus facile avec des ressources, il suffit de copier le fichier de ressources, ajouter l'extension de la culture au nom et à ajouter les traductions de la ressource et vous avez terminé, mais encore une fois, complètement en bas de la DB de la conception, de sorte que c'est quelque chose à garder à l'esprit lors de la conception de la DB et dit assez rien sur la manière de maintenir les traductions dans la base de données.
Par en grande, je dirais que les ressources sont plus faciles à utiliser et très facile à entretenir et étendre (et ils sont déjà intégrés .NET), bien que DB a un net avantage si vous avez besoin de partager des traductions. Donc, si j'ai envie de dire, je dirais que la méthode recommandée consiste à utiliser les Ressources, mais DB ne l'avoir de la place et cela dépend vraiment du projet.
J'ai été à la recherche sur les mêmes sources que pour les mêmes besoins, mais comme vous le dites, il est très difficile de trouver une meilleure solution.
Mais j'ai décidé d'aller avec la solution par Michael Chambaud que vous avez lié à votre question. Les raisons pour cela est que c'était facile à mettre en œuvre, m'a donné l'url que je voulais et comme je ne suis pas encore certain à 100%... facile à remplacer dans l'avenir.
En plus de cela, je vais utiliser jquery mondialiser pour le client, de la mise en forme côté.
Il serait vraiment intéressant d'entendre ce que la solution que vous avez décidé sur?