67 votes

Support Angular JS pour la localisation

J'ai essayé de trouver de la documentation sur AngularJS pour supporter plusieurs langues sans succès. La localisation est-elle supportée?

7 votes

Ouvrons à nouveau ce truc!

0 votes

Tel qu'il est actuellement écrit, c'est fondamentalement une question de oui ou non. D'une grande valeur pour les programmeurs - même si la réponse est "non".

0 votes

"attranslate" est un outil moderne qui résout le problème: github.com/fkirc/attranslate Bien que "attranslate" soit destiné aux traductions semi-automatisées, il peut également être utilisé simplement dans le but de synchroniser les fichiers JSON

72voto

Thomas Deutsch Points 752

Consultez angular-translate ici : https://github.com/angular-translate/angular-translate

pour tous les bricoleurs :

Vous pouvez trouver des fichiers localisés pour Angular ici : ici

Ces fichiers vous aideront avec les filtres intégrés d'Angular : date, currency et number. Incroyable... jusqu'à présent.

Maintenant, si vous voulez utiliser vos propres textes, tout ce dont vous avez besoin est la puissance de l'injection de dépendance d'angular.js. Créez un nouveau fichier comme : "mesTextes_fr_fr.js" et utilisez $provide.value de cette manière :

$provide.value("mesTextes", {firstText : "Ceci est mon texte localisé"});

Pour plus de détails :
http://jsfiddle.net/4tRBY/24/

Pour une utilisation réelle, vous devriez ajouter un filtre : http://jsfiddle.net/4tRBY/41/

Conseils :

  • Assurez-vous d'insérer votre nouveau fichier de localisation dans votre html manuellement, via JS ou le serveur. (Le serveur est le meilleur choix ici !)
  • Si vous incluez l'un des fichiers de localisation d'angular, vous n'avez pas besoin de le configurer dans votre module d'application. (vous aurez automatiquement $locale - voir le fiddle)
  • Ajoutez une clé id à votre $provide-value - et définissez la valeur sur un code de langue que vous utilisez dans votre fichier - cela sera utile pour les tests.

2 votes

Peut-être que je ne pense pas correctement à cela, mais comment intégreriez-vous plusieurs langues (c'est-à-dire plus que l'anglais et autre chose) avec l'exemple que vous avez fourni? Feriez-vous une sorte de vérification de langue juste avant: "$provide.value("providedValue", {" ?

0 votes

Question rapide, que voulez-vous dire par "Le serveur est le meilleur choix ici"? Voulez-vous dire: Il est préférable de traiter la localisation côté serveur?

18voto

Ben Lesh Points 39290

Ce que vous recherchez est $locale.

Il y a en fait un exemple à mi-chemin sur la page d'accueil d'angularjs également.

Un extrait de leur exemple:

function BeerCounter($scope, $locale) {
  $scope.beers = [0, 1, 2, 3, 4, 5, 6];
  if ($locale.id == 'en-us') {
    $scope.beerForms = {
      0: 'pas de bière',
      one: '{} bière',
      other: '{} bières'
    };
  } else {
    $scope.beerForms = {
      0: 'žiadne pivo',
      one: '{} pivo',
      few: '{} pivá',
      other: '{} pív'
    };
  }
}

Je ne suis pas sûr que ce soit une "norme" en tant que telle... mais c'est un début. Si vous aviez beaucoup de localisation à faire, je pense que je créerais simplement un service à injecter dans mes contrôleurs... quelque chose comme ce pseudo-code:

app.service('myLocalization', ['$locale', function($locale) {
    var res = {
       'help' : { 
           'en-us': 'help',
           'es-mx': 'ayudame'
       },
       'beer' : {
            'en-us': 'bière',
            'es-mx': 'cerveza'
       }
    }

    return {
       getString: function(key) {
          return res[key][$locale.id];
       }
    }
});

0 votes

Eh bien, c'est ce qu'ils ont. Comme je l'ai dit, vous devrez créer le vôtre si vous voulez le faire d'une autre manière. Cela ressemblerait un peu à ce service que j'ai ci-dessus, seulement peut-être devriez-vous charger certains fichiers en utilisant $http.

0 votes

Cela pourrait fonctionner pour quelque chose de très simple. Si vous voulez des choses comme la traduction des espaces réservés à l'intérieur des zones de saisie, et le passage du singulier au pluriel lorsque les quantités changent, quelque chose de plus puissant/complexe est nécessaire. angular-gettext et angular-translate gèrent ces éléments.

0 votes

@Mike_Laird - le filtre de nombre et les directives ngPluralize fonctionnent bien pour vos deux exemples. Dans le dernier cas, vous auriez juste besoin de configurer votre propre service locale qui serait une table de hachage de l'attribut de configuration when pour que vous puissiez l'utiliser globalement, ou vous pourriez même modifier vos propres copies de $locale et les utiliser.

7voto

4vanger Points 76

J'ai créé un module spécifiquement pour des fins de localisation - https://github.com/4vanger/angular-l10n Il prend en charge la localisation des messages, les substitutions de paramètres, le changement de locale en vol et offre plusieurs moyens pratiques de l'utiliser - filtres, directives, etc.

1 votes

Très soigné, je vais peut-être essayer cela, merci

0 votes

J'aime le look de cela - je cherchais une localisation pour mon application rails/angularjs. Rails a une bonne i18n, il semble que l10n fasse de même.

0 votes

Cela a l'air super..!!

0voto

timothyswt Points 399

Vous pouvez aussi consulter ceci:

https://github.com/angular-ui/ui-utils/pull/173

les performances sont meilleures que celles de toutes les autres bibliothèques i18n disponibles pour Angular pour le moment.

0voto

kds Points 3749

Si vous recherchez un support i18n, vous pouvez vous référer au projet ci-dessous qui possède une capacité multilingue complète et est facile à implémenter. Jetez un œil au projet sur github

angularjs-localizationservice

0 votes

Ce module se concentre sur "traduction". Y a-t-il un module de soutien pour les filtres de nombres et de devises ?

0 votes

Vous pouvez utiliser AngularJs i18n et l10n. Très facile à implémenter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X