Khi bạn phải đối mặt với một vấn đề cần giải quyết (và thật lòng mà nói, ai không phải là những ngày này?), Chiến lược cơ bản thường được người máy tính của chúng ta thực hiện được gọi là chia rẽ và chinh phục. Nó như thế này:
- Khái niệm hóa vấn đề cụ thể như một tập hợp các vấn đề phụ nhỏ hơn.
- Giải quyết từng vấn đề nhỏ hơn.
- Kết hợp các kết quả thành một giải pháp của vấn đề cụ thể.
Nhưng chia rẽ và chinh phục thành phố không phải là chiến lược duy nhất có thể. Chúng ta cũng có thể có một cách tiếp cận tổng quát hơn:
- Khái niệm hóa vấn đề cụ thể như một trường hợp đặc biệt của một vấn đề tổng quát hơn.
- Bằng cách nào đó giải quyết vấn đề chung.
- Thích ứng giải pháp của vấn đề chung với vấn đề cụ thể.
- Eric Lippert
Tôi tin rằng nhiều giải pháp đã tồn tại cho vấn đề này bằng các ngôn ngữ phía máy chủ như ASP.Net/C#.
Tôi đã phác thảo một số khía cạnh chính của vấn đề
Vấn đề : Chúng tôi chỉ cần tải dữ liệu cho ngôn ngữ mong muốn
Giải pháp : Với mục đích này, chúng tôi lưu dữ liệu vào một tệp riêng cho từng ngôn ngữ
Ví dụ. res.de.js, res.fr.js, res.en.js, res.js (đối với ngôn ngữ mặc định)
Vấn đề: Các tệp tài nguyên cho mỗi trang phải được tách riêng để chúng tôi chỉ nhận được dữ liệu chúng tôi cần
Giải pháp : Chúng tôi có thể sử dụng một số công cụ đã tồn tại như
https://github.com/rgrove/lazyload
Vấn đề: Chúng tôi cần một cấu trúc cặp khóa / giá trị để lưu dữ liệu của chúng tôi
Giải pháp : Tôi đề xuất một đối tượng javascript thay vì chuỗi / chuỗi không khí. Chúng ta có thể hưởng lợi từ intellisense từ IDE
Vấn đề: Các thành viên chung nên được lưu trữ trong một tệp công khai và tất cả các trang sẽ truy cập chúng
Giải pháp : Với mục đích này, tôi tạo một thư mục trong thư mục gốc của ứng dụng web có tên Global_Resource và một thư mục để lưu trữ tệp toàn cầu cho mỗi thư mục con mà chúng tôi đặt tên là 'Local_Resource'
Vấn đề: Mỗi thành viên hệ thống con / thư mục con / mô-đun nên ghi đè các thành viên Global_Resource trên phạm vi của chúng
Giải pháp : Tôi đã xem xét một tệp cho mỗi
Cấu trúc ứng dụng
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
Mã tương ứng cho các tệp:
Global_Resource / default.js
var res = {
Create : "Create",
Update : "Save Changes",
Delete : "Delete"
};
Global_Resource / default.fr.js
var res = {
Create : "créer",
Update : "Enregistrer les modifications",
Delete : "effacer"
};
Tệp tài nguyên cho ngôn ngữ mong muốn sẽ được tải trên trang được chọn từ Global_Resource - Đây phải là tệp đầu tiên được tải trên tất cả các trang.
Người dùng quản lý hệ thống / Local_Resource / default.js
res.Name = "Name";
res.UserName = "UserName";
res.Password = "Password";
Người dùng quản lý hệ thống / Local_Resource / default.fr.js
res.Name = "nom";
res.UserName = "Nom d'utilisateur";
res.Password = "Mot de passe";
Người dùng quản lý hệ thống / Local_Resource / createdUser.js
// Override res.Create on Global_Resources/default.js
res.Create = "Create User";
Người dùng quản lý hệ thống / Local_Resource / createdUser.fr.js
// Override Global_Resources/default.fr.js
res.Create = "Créer un utilisateur";
tệp manager.js ( tệp này sẽ được tải sau cùng)
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");
Hy vọng nó giúp :)