Localiser les Chaînes de caractères en Javascript
Je suis actuellement à l'aide .resx
fichiers pour gérer mon serveur de ressources pour .NET.
l'application que j'ai affaire à permet aussi aux développeurs de plugin JavaScript dans les différents gestionnaires d'événements pour la validation côté client, etc.. Quelle est la meilleure façon pour moi de le localiser mes messages JavaScript et les chaînes de caractères?
Idéalement, je voudrais stocker les chaînes de la .resx
fichiers de les garder avec le reste des ressources localisées.
Je suis ouvert aux suggestions.
Vous devez vous connecter pour publier un commentaire.
Un code JavaScript de base de l'objet est un tableau associatif, de sorte qu'il peut facilement être utilisé pour stocker des paires clé/valeur. Donc, en utilisant JSON, vous pouvez créer un objet pour chaque chaîne pour être localisée comme ceci:
Ensuite, vous pourriez obtenir la version locale de chaque chaîne comme ceci:
Inspiré par SproutCore Vous pouvez définir les propriétés de l'
chaînes:
et puis il suffit de cracher la localisation correcte en fonction de votre locale:
Après Googler beaucoup et n'est pas satisfait avec la plupart des solutions présentées, j'ai juste trouvé une incroyable/solution générique qui utilise Les modèles de T4. Le poste complet par Jochen van Wylick vous pouvez lire ici:
À l'aide de T4 pour la localisation de JavaScript des ressources sur la base .fichiers resx
Principaux avantages sont:
les fichiers )
Inconvénients:
Comment cela fonctionne?
Fondamentalement, il a défini un modèle T4 qui pointe vers votre .fichiers resx. Avec un code C# il traverse chaque et chaque chaîne de ressource et de l'ajouter à JavaScript pur valeur de la clé de propriétés qui sont ensuite sortie en un seul fichier JavaScript appelé
Resources.js
(vous pouvez modifier le nom si vous le souhaitez).Modèle T4 [ modifier en conséquence pour pointer vers votre .fichiers resx emplacement ]
Dans la Forme/Vue latérale
Avoir la traduction correcte ramassé, ajouter ceci dans votre maître si vous êtes à l'aide de Formulaires web:
Si vous êtes en utilisant ASP.NET MVC (comme moi), vous pouvez le faire:
La
MetaAcceptLanguage
helper j'ai reçu de ce super post de Scott, Hanselman:La mondialisation, l'Internationalisation et de la Localisation dans ASP.NET MVC 3, JavaScript et jQuery - Partie 1
Utiliser
Avec un assembly satellite (au lieu d'un fichier resx) vous pouvez énumérer toutes les chaînes sur le serveur, où vous savez que la langue, donc la production d'un objet Javascript avec uniquement les chaînes de la langue correcte.
Quelque chose comme cela fonctionne pour nous (VB.NET code):
Cependant, nous n'avons pas trouvé un moyen de faire ce pour .fichiers resx encore, malheureusement.
JSGettext fait un excellent travail -- le chargement dynamique de GNU Gettext .les fichiers po à l'aide de n'importe quelle langue sur le backend. Google pour "Javascript Dynamiques de localisation avec Gettext et PHP" pour trouver une soluce pour JSGettext avec PHP (j'avais poster le lien, mais ce stupide site ne me laisse pas, soupir...)
Modifier: cette devrait être le lien
Je voudrais utiliser un objet/notation de tableau:
Alors vous pouvez juste changer le fichier JS, ou utiliser un appel Ajax pour redéfinir votre liste de mots.
Il y a une bibliothèque pour la localisation des applications JavaScript:
https://github.com/wikimedia/jquery.i18n
Il peut faire du paramètre de remplacement, prend en charge le sexe (intelligent il/elle manutention), le nombre (intelligent pluriel de manutention, y compris les langues qui ont plus d'un pluriel), et des règles de grammaire que certaines langues ont besoin.
Les chaînes de caractères sont stockées dans des fichiers JSON.
La seule exigence est jQuery.
Je n'ai la suite de localiser JavaScript pour une application mobile en cours d'exécution HTML5:
1.Créé un ensemble de fichiers de ressources pour chaque langue en les appelant comme "en.js" pour l'anglais. Chacune contenait les différentes chaînes de l'application comme suit:
2.Utilisé Lazyload pour charger le bon fichier de ressources basé sur les paramètres régionaux de langue de l'application: https://github.com/rgrove/lazyload
3.Passer le code de la langue par l'intermédiaire d'une Chaîne de Requête (Que je suis en train de lancer le fichier html à partir de Android à l'aide de PhoneGap)
4.Ensuite, j'ai écrit le code suivant pour charger dynamiquement le bon fichier de ressources:
5.À partir du fichier html je reportez-vous à la les chaînes de caractères comme suit:
Bien, je pense que vous pouvez considérer cela. Anglais-espagnol exemple:
Écrire 2 Scripts Js, comme ça:
Côté serveur - code-behind:
Où l'argot peut être "en-GB", vous savez, en fonction de l'utilisateur en cours de sélection ...
Javascript appelle:
Et il fonctionne, très facile, je pense.
Expansion sur diodeus.myopenid.com's réponse: votre code d'écrire un fichier contenant un JS tableau avec toutes les cordes, puis charger le fichier/script avant les autres du code JS.
La
MSDN
moyen de le faire, fondamentalement:Je ne peux pas vous dire la meilleure solution pour votre question, mais à mon humble avis c'est la pire façon de faire. Au moins maintenant vous savez comment ne PAS le faire.
Nous utilisons MVC et ont tout simplement créé un contrôleur de l'action de retour une chaîne localisée. Nous maintenons la culture de l'utilisateur dans la session et placez le fil de la culture avant tout appel à extraire une chaîne de langue, AJAX ou autre. Cela signifie que nous avons toujours retourner une chaîne localisée.
Je l'admets, ce n'est pas la méthode la plus efficace mais l'acquisition d'une chaîne localisée dans le javascript est rarement nécessaire que la plupart de localisation est fait dans nos vues partielles.
Mondiale.asax.cs
D'Action Du Contrôleur
Javascript