Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2014, 15:27
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

Локализация в 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, 01.07.2014 в 15:30.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2014, 16:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

vladislav.blinov,
то есть ответ ещё не пришёл с сервера а вы хотите уже им пользоваться?
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2014, 16:52
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

и как я мог забыть про async: false )) Спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 02.07.2014, 13:01
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Я так думаю логичней было б подключать 1 и тот же файл Js+ файл локализации. Надо только продумать механизм подстановки, чтоб не хардкодом а универсально было.
Я бы так сделал
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2014, 14:39
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

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

Функция будет получать значение и если язык en то просто возвращать, а если rus то прогонять через массив и заменять ключ на значение.
Вот над этой реализацией я думаю, пока мой велосипед с ajax работает)))
Но тут тоже есть нюансы... А если будет три языка... Да и такое решение мне кажется очень ресурсоёмкое... В общем пока в процессе. Но итоговый вариант выложу может кому пригодится.
Ответить с цитированием
  #6 (permalink)  
Старый 03.07.2014, 16:51
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

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


Вот как то так получилось, если есть замечания к реализации или предложения по изменения буду рад выслушать.
Ответить с цитированием
  #7 (permalink)  
Старый 03.07.2014, 17:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

vladislav.blinov,
тоже бы самое но асинхронно - чтоб браузер не ждал -- а сам ответ с сервера встал в нужное место когда придёт
Ответить с цитированием
  #8 (permalink)  
Старый 04.07.2014, 09:55
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

думал над этим, но у меня есть всплывающие сообщения -
alert('так нельзя');
и они в асинхронном режиме будут пустыми((
Ответить с цитированием
  #9 (permalink)  
Старый 04.07.2014, 12:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

vladislav.blinov,
для коротких сообщений и экстренных -- сделайте локализацию на месте - остальное переведите в скрытом режиме незаметном для пользователя -- синхронизация ведёт к тому что страница висит до ответа сервера -- ответ не пришёл по какойто причине -- всё аут - страницу признали глючной больше незаходим
Ответить с цитированием
  #10 (permalink)  
Старый 04.07.2014, 13:06
Аспирант
Отправить личное сообщение для vladislav.blinov Посмотреть профиль Найти все сообщения от vladislav.blinov
 
Регистрация: 13.07.2013
Сообщений: 30

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jquery ui-slider & Jquery selectbox, Слайдер срабатывает всего 1 раз Micher jQuery 4 31.01.2014 13:07
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Динамически загружаемая jQuery и jQuery-функции в одном файле 67bytes Общие вопросы Javascript 6 06.03.2013 09:01
Несколько версий JQuery UI на одной странице. Casufi jQuery 2 10.11.2012 15:24
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08