2017-09-21 3 views
0

Je suis complètement nouveau sur i18n. Maintenant, je commence à structurer mon application React Native pour la traduction.Comment modulariser les fichiers i18n

La plupart des métadonnées de l'application proviennent du serveur à la demande en tant que fichiers json décrivant la structure d'un certain module. Un client type peut avoir environ 5 à 50 "modules" de ce type chargés dans son magasin Redux.

Un type de module ressemble à ceci (simplifié):

{ 
    id: 5, 
    modifiedAt: new Date('2017-02-22T09:50:50.212+0100'), 
    name: 'Module name', 
    version: '1.0.0', 
    definition: { 
    preconditions: {}, 
    actions: {}, 
    effects: {}, 
    fieldDefinitions: { 
     room: { 
     title: 'Field title for "room"', 
     warning: 'Room is missing', 
     helpText: 'Enter room id/name', 
     type: 'string', 
     isRequired: true, 
     }, 
    ui: { 
     title: 'Module title, i.e. title on input form', 
     menuItem: { 
     iconName: 'md-settings', 
     iconLibrary: 'Ionicons', 
     iconColor: null, 
     sortOrder: 99, 
     }, 
     sections: [ 
     { 
      id: 'ed472749-ec3d-4b72-9ce9-f88ee703b2cf', 
      title: 'Installation', 
      isRequired: true, 
      formFields: ['room', ...], 
     }, 
     { 
      id: 'c070bfdf-88f1-423a-8854-b47b154c2359', 
      title: 'Photo before started repair', 
      isRequired: true, 
      sectionType: 'media', 
     } 
     ], 
    }, 
    }, 
    jsonSchema: { 
    //schema to validate form output before saving 
    //also used by API before saving to database 
    }, 
    i18n: { 
    en: { 

    }, 
    de: { 

    } 
    } 
}; 

J'ai ajouté 18n à la fin du JSON, comme cela est mon coup de couteau à ce sujet pour le moment. Les modules peuvent être fabriqués sur mesure pour certains clients. Je pense que ce serait bien d'encapsuler i18n dans chaque module.

Je pense utiliser reac-i18next pour cela car il semble bien documenté et fonctionnera aussi quand j'ai besoin de traduire mon site Express.

Je pense également à donner à chaque module un guid unique que je pourrais utiliser comme identifiant d'espace de noms lorsque l'application charge chaque fichier i18n. Est-ce un moyen raisonnable de modulariser les fichiers i18n?

J'ai cherché des tutoriels i18n, mais je finis seulement dans des tutoriels spécifiques à la langue. Quelqu'un peut-il recommander un apprenant i18n avec de bonnes discussions sur la structure à choisir, comment utiliser les espaces de noms, comment moduler, etc.

Répondre

1

nous avons personnellement classé (divisé) les fichiers i18n autour des fonctionnalités - pourrait refléter vos modules .... il Il n'y a rien de mal à diviser en un fichier par module - mais si vous arrivez à petit, vous pourriez les fusionner en fichiers plus gros ... dépend vraiment de la taille de votre projet.

Nous avons fait quelques documents/conseils pour avoir craché dans des fichiers sur https://docs.locize.com/namespaces.html (locize.com - est la en tant que couche de service de i18next et fournis par les personnes mêmes que i18next (moi;)))

+0

Merci! Devrais-je toujours utiliser i18next comme singleton, ou est-ce que cela aurait du sens de créer un nouveau i18next pour chaque module? Sinon, je pense que je dois injecter automatiquement "unique-namespace-guid:" avant chaque chaîne dans ma définition de module. Je ne veux pas déranger les auteurs de mon module en préfixant chaque chaîne avec un guid. – Michael

+0

nous utilisons https://github.com/i18next/react-i18next et une seule instance de i18next -> le translate hoc corrige fondamentalement la fonction t pour utiliser le premier espace de nom dans la liste – jamuhl