Çözmeniz gereken bir sorunla karşı karşıya kaldığınızda (ve açıkçası bu günlerde kim değil?), Biz bilgisayar çalışanlarının genellikle kullandığı temel stratejiye "böl ve fethet" denir. Bu böyle devam ediyor:
- Spesifik problemi daha küçük alt problemler olarak kavramsallaştırın.
- Her küçük sorunu çözün.
- Sonuçları, belirli bir problemin çözümünde birleştirin.
Ancak "böl ve yönet" tek olası strateji değildir. Ayrıca daha genel bir yaklaşım benimseyebiliriz:
- Belirli bir sorunu daha genel bir sorunun özel bir durumu olarak kavramsallaştırın.
- Bir şekilde genel sorunu çöz.
- Genel problemin çözümünü spesifik probleme uyarlayın.
- Eric Lippert
ASP.Net/C# gibi sunucu tarafı dillerinde bu sorun için birçok çözümün zaten mevcut olduğuna inanıyorum.
Sorunun bazı önemli yönlerini özetledim
ex. res.de.js, res.fr.js, res.en.js, res.js (varsayılan dil için)
Sorun: Her sayfa için kaynak dosyaları ayrılmalıdır, bu nedenle yalnızca ihtiyacımız olan verileri alıyoruz
Çözüm : https://github.com/rgrove/lazyload gibi zaten var olan bazı araçları kullanabiliriz
Sorun: Verilerimizi kaydetmek için bir anahtar / değer çifti yapısına ihtiyacımız var
Çözüm : string / string air yerine bir javascript nesnesi öneririm. Bir IDE'den intellisense'den yararlanabiliriz
Sorun: Genel üyeler herkese açık bir dosyada saklanmalı ve tüm sayfalar onlara erişmelidir
Çözüm : Bu amaçla web uygulamasının kökünde Global_Resources adında bir klasör ve onu 'Local_Resources' olarak adlandırdığımız her alt klasör için global dosyayı depolamak için bir klasör oluşturuyorum.
Sorun: Her alt sistem / alt klasör / modül üyesi, kapsamlarında Global_Resources üyelerini geçersiz kılmalıdır
Çözüm : Her biri için bir dosya düşündüm
Uygulama Yapısı
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
Dosyalar için ilgili kod:
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"
};
İstenen dil için kaynak dosyası Global_Resource'dan seçilen sayfaya yüklenmelidir - Bu, tüm sayfalara yüklenen ilk dosya olmalıdır.
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 dosyası (bu dosya en son yüklenmelidir)
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");
Umarım yardımcı olur :)