Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Локализация в jquery (https://javascript.ru/forum/jquery/48374-lokalizaciya-v-jquery.html)

vladislav.blinov 01.07.2014 15:27

Локализация в 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); //тут, как я ни старался, выводится пустая строка(((
}


Подскажите как получить перевод переменной или как можно это реализовать по другому.

рони 01.07.2014 16:07

vladislav.blinov,
то есть ответ ещё не пришёл с сервера а вы хотите уже им пользоваться?

vladislav.blinov 01.07.2014 16:52

и как я мог забыть про async: false )) Спасибо :thanks:

krasovsky 02.07.2014 13:01

Я так думаю логичней было б подключать 1 и тот же файл Js+ файл локализации. Надо только продумать механизм подстановки, чтоб не хардкодом а универсально было.
Я бы так сделал

vladislav.blinov 03.07.2014 14:39

Можно создать отдельный пхп файл который будет знать текущий язык, в нём js функция с массивом ["fish"=>"рыба", ...] в том месте где должна быть переменная написать:
functionLanguage('fish');

Функция будет получать значение и если язык en то просто возвращать, а если rus то прогонять через массив и заменять ключ на значение.
Вот над этой реализацией я думаю, пока мой велосипед с ajax работает)))
Но тут тоже есть нюансы... А если будет три языка... Да и такое решение мне кажется очень ресурсоёмкое... В общем пока в процессе. Но итоговый вариант выложу может кому пригодится.

vladislav.blinov 03.07.2014 16:51

В общем получилось следующее:
в 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;
    }


Вот как то так получилось, если есть замечания к реализации или предложения по изменения буду рад выслушать.

рони 03.07.2014 17:36

vladislav.blinov,
тоже бы самое но асинхронно - чтоб браузер не ждал -- а сам ответ с сервера встал в нужное место когда придёт

vladislav.blinov 04.07.2014 09:55

думал над этим, но у меня есть всплывающие сообщения -
alert('так нельзя');
и они в асинхронном режиме будут пустыми((

рони 04.07.2014 12:04

vladislav.blinov,
для коротких сообщений и экстренных -- сделайте локализацию на месте - остальное переведите в скрытом режиме незаметном для пользователя -- синхронизация ведёт к тому что страница висит до ответа сервера -- ответ не пришёл по какойто причине -- всё аут - страницу признали глючной больше незаходим

vladislav.blinov 04.07.2014 13:06

Создать два ajax запроса? один для перевода текста на странице - асинхронный, а другой для alert - синхронный?


Часовой пояс GMT +3, время: 02:57.