Lorsque vous êtes confronté à un problème à résoudre (et franchement, qui n'est pas de nos jours?), La stratégie de base généralement adoptée par nous, informaticiens, s'appelle «diviser pour conquérir». Ça va comme ça:
- Conceptualisez le problème spécifique comme un ensemble de sous-problèmes plus petits.
- Résolvez chaque petit problème.
- Combinez les résultats en une solution du problème spécifique.
Mais «diviser pour conquérir» n'est pas la seule stratégie possible. Nous pouvons également adopter une approche plus généraliste:
- Conceptualisez le problème spécifique comme un cas particulier d'un problème plus général.
- Résolvez en quelque sorte le problème général.
- Adaptez la solution du problème général au problème spécifique.
- Éric Lippert
Je crois que de nombreuses solutions existent déjà pour ce problème dans les langages côté serveur tels que ASP.Net/C#.
J'ai décrit certains des principaux aspects du problème
Problème : nous devons charger les données uniquement pour la langue souhaitée
Solution : à cette fin, nous sauvegardons les données dans des fichiers séparés pour chaque langue
ex. res.de.js, res.fr.js, res.en.js, res.js (pour la langue par défaut)
Problème: les fichiers de ressources de chaque page doivent être séparés afin que nous n'obtenions que les données dont nous avons besoin
Solution : nous pouvons utiliser certains outils qui existent déjà comme
https://github.com/rgrove/lazyload
Problème: nous avons besoin d'une structure de paires clé / valeur pour enregistrer nos données
Solution : je suggère un objet javascript au lieu de string / string air. Nous pouvons bénéficier de l'intellisense d'un IDE
Problème: les membres généraux doivent être stockés dans un fichier public et toutes les pages doivent y accéder
Solution : À cet effet, je crée un dossier à la racine de l'application Web appelé Global_Resources et un dossier pour stocker le fichier global pour chaque sous-dossier que nous l'avons nommé 'Local_Resources'
Problème: chaque membre de sous-systèmes / sous-dossiers / modules doit remplacer les membres Global_Resources sur leur étendue
Solution : j'ai considéré un fichier pour chaque
Structure de l'application
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
Le code correspondant pour les fichiers:
Global_Resources / default.js
var res = {
Create : "Create",
Update : "Save Changes",
Delete : "Delete"
};
Global_Resources / default.fr.js
var res = {
Create : "créer",
Update : "Enregistrer les modifications",
Delete : "effacer"
};
Le fichier de ressources pour la langue souhaitée doit être chargé sur la page sélectionnée dans Global_Resource - Ce doit être le premier fichier chargé sur toutes les pages.
UserManagementSystem / Local_Resources / default.js
res.Name = "Name";
res.UserName = "UserName";
res.Password = "Password";
UserManagementSystem / Local_Resources / default.fr.js
res.Name = "nom";
res.UserName = "Nom d'utilisateur";
res.Password = "Mot de passe";
UserManagementSystem / Local_Resources / createUser.js
// Override res.Create on Global_Resources/default.js
res.Create = "Create User";
UserManagementSystem / Local_Resources / createUser.fr.js
// Override Global_Resources/default.fr.js
res.Create = "Créer un utilisateur";
fichier manager.js (ce fichier doit être chargé en dernier)
res.lang = "fr";
var globalResourcePath = "Global_Resources";
var resourceFiles = [];
var currentFile = globalResourcePath + "\\default" + res.lang + ".js" ;
if(!IsFileExist(currentFile))
currentFile = globalResourcePath + "\\default.js" ;
if(!IsFileExist(currentFile)) throw new Exception("File Not Found");
resourceFiles.push(currentFile);
// Push parent folder on folder into folder
foreach(var folder in parent folder of current page)
{
currentFile = folder + "\\Local_Resource\\default." + res.lang + ".js";
if(!IsExist(currentFile))
currentFile = folder + "\\Local_Resource\\default.js";
if(!IsExist(currentFile)) throw new Exception("File Not Found");
resourceFiles.push(currentFile);
}
for(int i = 0; i < resourceFiles.length; i++) { Load.js(resourceFiles[i]); }
// Get current page name
var pageNameWithoutExtension = "SomePage";
currentFile = currentPageFolderPath + pageNameWithoutExtension + res.lang + ".js" ;
if(!IsExist(currentFile))
currentFile = currentPageFolderPath + pageNameWithoutExtension + ".js" ;
if(!IsExist(currentFile)) throw new Exception("File Not Found");
J'espère que ça aide :)