Quando você se depara com um problema a ser resolvido (e, francamente, quem não é hoje em dia?), A estratégia básica geralmente adotada por nós é chamada de "dividir e conquistar". É assim:
- Conceitualize o problema específico como um conjunto de subproblemas menores.
- Resolva cada problema menor.
- Combine os resultados em uma solução do problema específico.
Mas “dividir e conquistar” não é a única estratégia possível. Também podemos adotar uma abordagem mais generalista:
- Conceitualize o problema específico como um caso especial de um problema mais geral.
- De alguma forma, resolva o problema geral.
- Adapte a solução do problema geral ao problema específico.
- Eric Lippert
Acredito que já existem muitas soluções para esse problema em linguagens do servidor, como ASP.Net/C#.
Eu descrevi alguns dos principais aspectos do problema
Problema : precisamos carregar dados apenas para o idioma desejado
Solução : para esse fim, salvamos os dados em arquivos separados para cada idioma
ex. res.de.js, res.fr.js, res.en.js, res.js (para o idioma padrão)
Problema: os arquivos de recursos de cada página devem ser separados, para obtermos apenas os dados necessários
Solução : podemos usar algumas ferramentas que já existem, como
https://github.com/rgrove/lazyload
Problema: precisamos de uma estrutura de par de chave / valor para salvar nossos dados
Solução : sugiro um objeto javascript em vez de string / string air. Podemos nos beneficiar do intellisense de um IDE
Problema: os membros gerais devem ser armazenados em um arquivo público e todas as páginas devem acessá-los
Solução : para esse propósito, crio uma pasta na raiz do aplicativo Web chamada Global_Resources e uma pasta para armazenar o arquivo global para cada subpasta que denominamos 'Local_Resources'
Problema: cada membro de subsistema / subpasta / módulo deve substituir os membros Global_Resources em seu escopo
Solução : considerei um arquivo para cada
Estrutura de Aplicação
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
O código correspondente para os arquivos:
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"
};
O arquivo de recurso para o idioma desejado deve ser carregado na página selecionada em Global_Resource - Esse deve ser o primeiro arquivo carregado em todas as páginas.
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";
arquivo manager.js (esse arquivo deve ser carregado por último)
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");
Espero que ajude :)