Nous développons une application avec Angular 8.2. Cette question n'est pas liée à AngularJs.
J'ai lu le document de localisation angulaire ici: https://angular.io/guide/i18n
Mais il semble que la localisation ait été faite dans le processus de construction. Une fois l'application créée, elle ne peut pas être modifiée. Alors, comment pouvons-nous créer une application angulaire qui prend en charge le changement de langue sans Internet?
Notre application est déployée derrière CDN. Les serveurs CDN rétrocontrôlent les fichiers HTML, JavaScript et CSS et mettront en cache tous les fichiers transmis. Le changement de langue de l'application côté serveur n'est pas disponible.
Et nous avons fourni une application côté client basée sur l'électron. Nous devons livrer l'application une fois et l'utilisateur peut basculer entre différentes langues sans Internet. Mais je n'y ai trouvé aucune solution.
Vous pouvez mentionner que nous pouvons changer de langue via le changement de domaine. Mais pour des raisons CORS, le nom de domaine de notre application côté client est limité et ne peut pas être changé. Un seul nom de domaine est donc disponible.
Et nous avons créé et publié notre application sur le Google Play Store via TWA. Le domaine a été enregistré avec l'application. Le changement de domaine entraîne également le téléchargement de l'application à partir du Store.
Et le code source de l'application est ici: https://github.com/AiursoftWeb/Kahla.App
Juste pour d'éventuelles informations supplémentaires. Pas besoin de le vérifier pour répondre à cette question.
3 Réponses :
Nous avons été confrontés à des exigences similaires dans le passé et c'est pourquoi j'ai créé un article de blog sur les traductions en Angular en tant que code (sans les bibliothèques, juste votre code et l'architecture de votre projet).
https://medium.com/angular-in-depth/angular-typed-translations-29353f0a60bc
Pour répondre à tous les défis:
CDN :
domain.com/language/page
domain.com
peut inclure une logique de redirectionElectron :
Domaine :
domain.com/en/contact
pour l'anglais domain.com/cs/contact
pour le tchèqueGoogle Play Store :
Même si vous décidez de ne pas opter pour la commutation basée sur la "route", vous pouvez stocker les traductions dans votre service de gestion d'état ou d'encapsulation et y accéder comme vous le feriez avec toute autre donnée "asynchrone" dans le modèle via un tube async
3ème partie : certaines autres solutions impliquant des bibliothèques tierces sont ngx-translate (obsolète) et Transloco
Salut, merci pour votre solution! Tout est parfait! J'ai trouvé votre démo sur: github.com/vmasek/angular-typed-translations-demo et j'ai essayé de l'exécuter. Je marquerai la bonne réponse si aucune autre meilleure réponse. Merci!
Vous pouvez livrer un fichier contenant les traductions avec votre application. Par exemple, un Translations.json comme ça:
{ text: 'this is english', textid: 123, language 'GB' }, { text: 'ÑÑо по-английÑки' , textid: 123, language 'RUS' }, {...}
Comme ce fichier fait partie de votre projet, l'utilisateur n'a pas besoin d'un accès Internet pour changer de langue.
Cela a changé dans Angular 9 et versions ultérieures. Vous pouvez désormais compiler l'application une seule fois, puis charger les traductions dans une langue spécifique lors de l'exécution. Malheureusement, Angular ne contient pas d'API pour obtenir les fichiers de ressources à l'exécution, mais vous devez utiliser un module complémentaire tiers. Le package npm de Soluling en est un . Une fois que vous l'utilisez, vous pouvez déployer l'application dans une seule URL et elle peut servir n'importe quel nombre de langues.
J'ai écrit un échantillon qui le montre.