Коли ви стикаєтеся з проблемою вирішити (і, чесно кажучи, хто цього дня не буває?), Основна стратегія, яку зазвичай приймають ми, комп'ютерні люди, називається "розділити і перемогти". Виходить так:
- Концептуалізуйте конкретну проблему як сукупність менших підзадач.
- Вирішіть кожну меншу задачу.
- Об’єднайте результати в вирішення конкретної проблеми.
Але "розділити і перемогти" - це не єдина можлива стратегія. Ми можемо також скористатися більш загальним підходом:
- Концептуйте конкретну проблему як особливий випадок більш загальної проблеми.
- Якось вирішити загальну проблему.
- Пристосувати рішення загальної задачі до конкретної проблеми.
- Ерік Ліпперт
Я вважаю, що для вирішення цієї проблеми існує вже багато рішень у мовах на стороні сервера, таких як ASP.Net/C#.
Я окреслив деякі основні аспекти проблеми
колишній res.de.js, res.fr.js, res.en.js, res.js (для мови за замовчуванням)
Проблема: Файли ресурсів для кожної сторінки повинні бути розділені, щоб ми отримали лише потрібні нам дані
Рішення : Ми можемо використовувати деякі інструменти, які вже існують, як-от
https://github.com/rgrove/lazyload
Проблема: нам потрібна структура пари / значення пари, щоб зберегти наші дані
Рішення : Я пропоную об’єкт javascript замість string / string air. Ми можемо отримати користь від інтелігенції від 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");
Сподіваюся, це допомагає :)