Локализация в 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, время: 02:57. |