Когда вы сталкиваетесь с проблемой, которую нужно решить (и, честно говоря, кто не решается в наши дни?), Основная стратегия, обычно используемая нами, компьютерными людьми, называется «разделяй и властвуй». Это выглядит так:
- Представьте себе конкретную проблему как набор более мелких подзадач.
- Решайте каждую меньшую проблему.
- Объедините результаты в решение конкретной проблемы.
Но «разделяй и властвуй» - не единственная возможная стратегия. Мы также можем использовать более общий подход:
- Представьте себе конкретную проблему как частный случай более общей проблемы.
- Как-нибудь решить общую проблему.
- Адаптируйте решение общей проблемы к конкретной проблеме.
- Эрик Липперт
Я считаю, что для этой проблемы уже существует множество решений в серверных языках, таких как ASP.Net/C#.
Я обозначил некоторые из основных аспектов проблемы.
ех. res.de.js, res.fr.js, res.en.js, res.js (для языка по умолчанию)
Проблема: файлы ресурсов для каждой страницы должны быть разделены, чтобы мы получали только те данные, которые нам нужны.
Решение : мы можем использовать уже существующие инструменты, например
https://github.com/rgrove/lazyload
Проблема: нам нужна структура пары ключ / значение для сохранения наших данных
Решение : я предлагаю объект javascript вместо строки / строки air. Мы можем извлечь выгоду из intellisense из IDE
Проблема: общие члены должны храниться в общедоступном файле, и все страницы должны иметь к ним доступ
Решение : для этой цели я создаю папку в корне веб-приложения с именем Global_Resources и папку для хранения глобального файла для каждой подпапки, которую мы назвали «Local_Resources».
Проблема: каждый член подсистем / подпапок / модулей должен переопределять элементы Global_Resources в своей области
Решение : я рассмотрел файл для каждого
Структура приложения
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
Соответствующий код для файлов:
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"
};
Файл ресурсов для желаемого языка должен быть загружен на страницу, выбранную из Global_Resource - это должен быть первый файл, загружаемый на всех страницах.
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";
файл manager.js (этот файл должен быть загружен последним)
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");
Надеюсь, поможет :)