Локализация в jquery
Всем привет!
Подскажите как правильнее сделать. Есть сайт, написанный на php с двумя языками rus/en. И есть файл code.js в нём обработка нажатия кнопок, всплывающие окна и другие примочки jquery. Проблема в том, что все всплывающие окна только на русском. Можно создать два файла - code_en.js и code_rus.js и в зависимости от языка подключать тот или другой файл. Но в файле 3500 строк и дублировать все изменения в каждый из файлов... не совсем правильно. Решил написать ajax запрос для получения текущего языка получилось следующее:
$(document).ready(function () {
$.ajax({
url: '/index.php/default/language',
'cache': false,
success: function(language) {
if(language = en){
fish = "fish";
client = "client";
...
}
if(language = rus){
fish = "рыба";
client = "клиент";
...
}
}
});
alert(fish); //тут, как я ни старался, выводится пустая строка(((
}
Подскажите как получить перевод переменной или как можно это реализовать по другому. |
vladislav.blinov,
то есть ответ ещё не пришёл с сервера а вы хотите уже им пользоваться? |
и как я мог забыть про async: false )) Спасибо :thanks:
|
Я так думаю логичней было б подключать 1 и тот же файл Js+ файл локализации. Надо только продумать механизм подстановки, чтоб не хардкодом а универсально было.
Я бы так сделал |
Можно создать отдельный пхп файл который будет знать текущий язык, в нём js функция с массивом ["fish"=>"рыба", ...] в том месте где должна быть переменная написать:
functionLanguage('fish');
Функция будет получать значение и если язык en то просто возвращать, а если rus то прогонять через массив и заменять ключ на значение. Вот над этой реализацией я думаю, пока мой велосипед с ajax работает))) Но тут тоже есть нюансы... А если будет три языка... Да и такое решение мне кажется очень ресурсоёмкое... В общем пока в процессе. Но итоговый вариант выложу может кому пригодится. |
В общем получилось следующее:
в js файле
function translate(string){
var str;
$.ajax({
url: '/index.php/default/translater',
'cache': false,
async: false,
data: {string: string},
success: function(strings) {
str = strings;
}
});
return str;
}
там где нужно перевести
alert(translate('Это нужно перевести!'))
в php файле:
public static function translater($string){
$query_for_language = R::load('_user', Yii::app()->user->userModel->id);
$array = array(
'It needs to be translated!' => 'Это нужно перевести!',
);
if($query_for_language->language == 'en'){
if(array_search($string,$array))
$string = array_search($string,$array);
}
return $string;
}
Вот как то так получилось, если есть замечания к реализации или предложения по изменения буду рад выслушать. |
vladislav.blinov,
тоже бы самое но асинхронно - чтоб браузер не ждал -- а сам ответ с сервера встал в нужное место когда придёт |
думал над этим, но у меня есть всплывающие сообщения -
alert('так нельзя');
и они в асинхронном режиме будут пустыми(( |
vladislav.blinov,
для коротких сообщений и экстренных -- сделайте локализацию на месте - остальное переведите в скрытом режиме незаметном для пользователя -- синхронизация ведёт к тому что страница висит до ответа сервера -- ответ не пришёл по какойто причине -- всё аут - страницу признали глючной больше незаходим |
Создать два ajax запроса? один для перевода текста на странице - асинхронный, а другой для alert - синхронный?
|
| Часовой пояс GMT +3, время: 05:47. |