2011-04-01 6 views
27

J'essaye de réaliser la globalisation/localisation dans mon application MVC 3. Je ne veux pas de vues différentes pour chaque langue. S'il vous plaît suggérer comment je peux procéder. Tous les liens/URL pris en charge seront d'une grande aide.Globalisation dans ASP.Net MVC 3

Répondre

43

Vous localisent de la même manière que toute autre application comme ceci:

  1. Créez un dossier, appelez par exemple Ressources
  2. Cliquez avec le bouton droit sur le dossier et ajoutez une classe ... choisissez le fichier de ressources. Appelez-le comme vous voulez, par ex. Strings.resx
  3. Dans les propriétés du fichier, changer personnalisé outil à PublicResXFileCodeGenerator
  4. alimenter le fichier de ressources avec des paires de clés de traduction et de la valeur (ce sera la traduction par défaut)
  5. Créer d'autres ressources avec le nom du culture pour laquelle ils sont dans ce format: {name} .de.resx eg (Ceci est pour Razor) crack ouvrir le web.config dans le dossier Views et l'ajouter à /configuration/system.web.webPages.razor/pages/namespaces: < add namespace = "Ressources"/> (en supposant que resources est le nom du dossier dans lequel vous avez créé les ressources et que vous n'avez pas modifié l'espace de noms par défaut sur les fichiers de ressources eux-mêmes). Cette étape signifie que vous n'êtes pas obligé de qualifier complètement les classes de ressources dans vos vues chaque fois que vous souhaitez référencer une traduction.
  6. Utilisez les traductions en place du texte dans vos vues comme avec le code suivant:

    @Strings.MyString 
    

Les chaînes seront automatiquement traduits dans la vue en fonction de CultureInfo.CurrentCulture mais ce n'est pas réglé automatiquement

Vous devrez modifier le CurrentCulture (potentiellement dans Application_BeginRequest). La manière dont vous faites cela dépend de vous, il peut s'agir d'une valeur de route ou de la langue du navigateur de l'utilisateur

Vous trouverez une liste des langues préférées de l'utilisateur (dans l'ordre) dans HttpContext.Current.Request.UserLanguages.

+0

Merci beaucoup Martin. – Vivek

+2

Oon l'étape 7 Je fais de même dans le web. config comme highligted mais avec l'erreur "Le type ou le nom de l'espace de nom ***** 'Resource' est introuvable (manque-t-il une directive using ou une référence d'assembly?)" ***** "S'il vous plaît élaborer plus ou – sandeep

+1

Voici le minimum dont vous avez besoin pour que cela fonctionne http://www.mediafire.com/file/5843d7tyqalv451/Globalization.zip –

5

Voici un post détaillées sur MVC 3 Mondialisation/Internationalisation http://afana.me/post/aspnet-mvc-internationalization-part-2.aspx

+0

Ce poste est excellent pour couvrir la différence entre la langue, la culture et la région - mais il fait la même erreur que l'abov e post dans la façon dont il appelle l'espace de noms incomplet dans Web.config. –

+0

Il mentionne que vous devez ajouter un espace de noms à vos vues web.config –

5

Pour ajouter quelques détails à Martin Booth's great answer (dans le cas où son lien MediaFire pourrait disparaître), voici comment j'iDid il:

Je l'ai utilisé deux fichiers, car je ne ai besoin anglais et l'allemand (« de ») pour l'instant:

enter image description here

pour les propriétés de chaque fichier, je devais entrer manuellement l'outil sur mesure ainsi que l'espace de noms outil personnalisé valeurs, pour chaque fichier:

enter image description here

enter image description here

Et enfin, je suis entré dans ce qui suit dans le fichier web.config racine, sous la section <system.web>:

<globalization uiCulture="auto" culture="auto" /> 

Bien sûr J'ai également ajouté la directive d'espace de noms dans le fichier Web.Config sous le dossier Views (ie pas la racine d'un), comme Martin décrit:

<add namespace="ViewResources" /> 

Et puis je pouvais enfin accéder aux ressources fortement typées dans mon (partiel) vue Razor:

<h2>@ViewResources.Test1</h2> 

BTW: cela a fonctionné avec MVC 4 aussi, pas seulement MVC 3.