Языковая локализация Phonegap/Sencha

Проблема:
Я собираюсь внедрить локализацию языка в уже очень большое приложение ipad, которое было построено с использованием сенсорного экрана sencha, завернутого в телефонную связку. У меня есть английский и испанский переводы в json файлах.

Что я планирую делать:
Я планирую загрузить json файлы в сенсорный магазин sencha, создав глобальный объект. Затем в каждом месте, где я вызываю текст, который отображается, я заменю текст вызовом глобального объекта.

Мой вопрос (ы):

  • Есть ли более простой способ реализовать локализацию языка с помощью моего установка?

  • Я буду сталкиваться с проблемами с родным материалом sencha (например, datepickers)?

  • При загрузке/перезагрузке языковых json файлов у меня будет производительность проблемы (требуется перезагрузка webview, вопросы изменения размера объекта sencha, и т.д.)


edit 1: Полезная информация:
 Для тех, кто идет по этой дороге, быстро становится полезным написать простой плагин для телефонных разговоров, чтобы получить настройки языка устройства ipad/iphone в вашем javascript. Для этого требуется плагин, который будет выглядеть примерно так: Javascript:
часть 1:

PhoneGap.exec("PixFileDownload.getSystemLanguage");

часть 2 (функция обратного вызова):

setLanguage(returnedLanguage)
{
   GlobalVar.CurrentLanguage = returnedLanguage; //GloablVar.CurrentLanguage already defined
}

Цель C:

-(void)getSystemLanguage:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options
{
    /*Plugin Details
    PhoneGap.exec("PixFileDownload.getSystemLanguage");
    Returns Language Code
    */

    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString *language = [languages objectAtIndex:0];
    NSLog(@"####### This is the language code%@",language);
    NSString  *jsCallBack;
    jsCallBack = [NSString stringWithFormat:@"setLanguage('%@');",language];    
[self.webView stringByEvaluatingJavaScriptFromString:jsCallBack];

}

изменить 2: кодировка символов При добавлении дополнительных символов языка в проект sencha (или любой проект телефонной сети веб-просмотра) убедитесь, что у вас есть правильная кодировка, указанная в индексном файле. Это тег, который мне нужен.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Ответ 1

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

1- Есть ли более простой способ реализовать локализацию языка с помощью моего установка?

Не то, что я знаю. Комментарий Стюарта предоставил эту ссылку локализация Сенча. Использовать хранилище или глобальный объект JSON?, в котором есть некоторая хорошая информация о том, как вы можете использовать переопределения класса. Мне не понравился этот подход, потому что он распространял мои языковые переводы на разные классы. Но, конечно, если вы делаете что-то простое или хотите что-то более мощное, возможно, вам следует это расследовать.

2 Будет ли я сталкиваться с проблемами с родным материалом sencha (например, datepickers)?

В конце концов я окончательно оставил "datepickers" на английском языке. Но все остальное было относительно легко настроить. Почти каждый графический элемент пользовательского интерфейса может изменить текст.

3- При загрузке/перезагрузке языковых json файлов у меня будет производительность проблемы (требуется перезагрузка webview, вопросы изменения размера объекта sencha, и т.д.).

Метод, который я использовал (см. ниже), работал исключительно хорошо в отношении производительности. Единственная проблема, которая у вас есть, правильная, когда вы переключаете языки, вам нужна эта страница для перезагрузки. Сенча обрабатывал изменения размеров без каких-либо недостатков, кроме случаев, когда я был глупым и статически установленным.

Некоторые из того, что я сделал, были описаны в редактировании вопроса. Вот подробный обзор моего решения. (предупреждение, это не самое изящное решение.)

Вместо использования чистого файла JSON я закончил использование функции javascript. Это не самое лучшее решение, потому что оно требует некоторого минимального обслуживания, но JSON-анализ с помощью phonegap/sencha не самый лучший. (Я получаю файлы JSON из транслитера и быстро вставляю в файл javascript. Занимает около 2 минут, см. Дальнейшие объяснения ниже).

Language.js

function setLanguage(language)
{

    if(language == "en")
    {
        //console.log("inside if Language == en");
        GlobalLanguage.CurrentLanguage = language;

        GlobalLanguage.ID = {"glossary": [
        {   
            //CONVERTED JSON
            about : 'About',
            checking_for_updates : 'Checking for updates...(This may take a few minutes.)'
            //Any additional translations

        }
        ]};
    }
    if (language == "es"){
        //console.log("inside language == es");
        GlobalLanguage.CurrentLanguage = language;
        GlobalLanguage.ID = {"glossary": [
            {
            //CONVERTED JSON
            about : 'Acerca de ',
            checking_for_updates : 'Verificando actualizaciones... (Capas que demore algunos minutos).'
            //Any additional translations

        }]};
    }
        if (language == "pt"){
        //console.log("inside language == pt");
        GlobalLanguage.CurrentLanguage = language;
        GlobalLanguage.ID = {"glossary": [
            {
             //CONVERTED JSON
              about : 'Sobre',
              checking_for_updates : 'Verificando se há atualizações... (pode demorar alguns minutos.)'
              //Any additional translations

        }]};
    }
}

Как вы можете видеть, этот файл позволяет использовать 3 языка (португальский, английский и испанский). После установки языка вы можете получить доступ к каждой локализованной строке в любом месте вашего объекта. Например, если вам нужно получить доступ к слову "about", просто используйте:

GlobalLanguage.ID.glossary[0]["about"]

Это приведет к доступу к объекту GlobalLanguage, который будет иметь любой язык, загруженный в свойства. Поэтому во время вашего проекта вы могли бы получить эти звонки. Однако я бы рекомендовал сделать это еще на один шаг

function langSay(languageIdentifier){


   // console.log("inside langSay");

    if(!GlobalLanguage.ID.glossary[0][languageIdentifier]){
        return "[! LANGUAGE EXCEPTION !]";
    }
    else{
        return GlobalLanguage.ID.glossary[0][languageIdentifier];
    }
}

Это защитит вас от языковых исключений и сбоя вашей программы, не зная, где (у вас могут быть сотни или тысячи свойств, заданных в файле language.js). Теперь просто:

langSay("about")

Еще одно примечание о форматировании из JSON. Формат, в котором вы хотите, чтобы ваши языковые файлы были:

languageIdentifier : 'Translation',
languageIdentifier : 'Translation',
languageIdentifier : 'Translation'

Я использовал Excel для форматирования. Кроме того, языковые идентификаторы являются уникальными идентификаторами без пробелов. Я рекомендую просто использовать Excel для форматирования первых 3 - 4 слов word1_word2_word3_word4 английского перевода.

word1_word2_word3 : 'word1 word2 word3'

Надеюсь, это поможет вам! Я был бы рад ответить на любые вопросы.