Примечание: Если вы считаете, что этот пост должен иметь лучший заголовок, сообщите мне / отредактируйте его!
Я пытаюсь интернационализировать созданную мной форму ExtJS.У меня есть javascript для моей формы в одном файле и переводы в другом файле javascript, такие как:
english.js
function get_i18n(){
var i18n = {
Apply : 'Apply For Scholarship',
Student_Information : 'Student Information',
First_Name : 'First Name',
Last_Name : 'Last Name',
Gender : 'Gender',
Male : 'Male',
Female : 'Female',
}
return i18n;
}
Затем в моей форме. Js
function getLang(){
// decode language passed in url
var locale = window.location.search
? Ext.urlDecode(window.location.search.substring(1))
: '';
return locale['lang'];
}//end getLang()
var form;
var lang = getLang();
var languageFile;
if (lang == 'chn'){
languageFile = "chinese.js";
}
else if (lang == 'eng'){
languageFile = "english.js";
}
else if (lang == 'tib'){
languageFile = "tibetan.js";
}
function getLabels(file){
var a = $.getScript(file, function(){
var b = get_i18n();
return b;
});
return a;
}//end getLabels()
var i18n = getLabels(languageFile);
Ext.onReady(function(){
Ext.QuickTips.init();
form = new Ext.form.FormPanel({
id: 'scholarshipForm',
labelWidth: 200, // label settings here cascade unless overridden
url:'scholarshipSubmit.php',
method: 'POST',
frame:true,
layout: 'form',
title: 'Apply For Scholarship',
bodyStyle:'padding:10px 10px 0',
width: 610,
itemCls: 'formStyle',
items: [{
xtype:'fieldset',
checkboxToggle:false,
title: 'Student Information',
autoHeight:true,
layout: 'form',
defaults: {width: 210},
collapsed: false,
items :[{
xtype: 'textfield',
fieldLabel: i18n['First_Name'], //RIGHT HERE I TRY TO USE THE RESULTS
allowBlank:false,
name: 'first',
maskRe: /([a-zA-Z\s]+)$/,
msgTarget: 'side'
}
...
...
...
form.render(document.body);
});
Немного поиграв с кодом, я знаю, что моя проблема, вероятно, связана с тем, как я обрабатываю асинхронный jQuery $ .getScript.Странная вещь в том, что когда я не пытался получить язык из переменной get url и вместо этого запустил свою функцию getLabels, передавая имя файла непосредственно $ .getScript внутри него, я получил желаемые результаты и отобразили метки моей формысоответственно.Я очень признателен за любую помощь с этим.Я все еще новичок в асинхронных вызовах, и они всегда меня застревают: - /.Я подумал, что наличие $ .getScript внутри другой функции и всплывающее уведомление о возвращении решит проблему, и, возможно, так и будет, как я уже говорил ранее, она работала нормально, пока я не добавил логику для получения имени файла на основе URL $ _GET..
Спасибо за ваше время,
Эльша
РЕДАКТИРОВАТЬ
Теперь у меня есть english.json
{i18n: {
"Apply" : 'Apply For Scholarship',
"Student_Information" : 'Student Information',
"First_Name" : 'First Name',
"Last_Name" : 'Last Name',
"Gender" : 'Gender',
"Male" : 'Male',
"Female" : 'Female'
}
}
и я пытаюсь сделать это:
var i18n = {};
function getLabels(file){
$.getJSON(file, i18n, function(data) { i18n = data.i18n; return i18n;});
return true;
}
getLabels(languageFile);
Мне нужно получить объект i18n из этой функции обратного вызова, которую я могу использовать следующим образом: i18n.First_Name
etc