Phonegap / Sencha Language Localization - PullRequest
       19

Phonegap / Sencha Language Localization

11 голосов
/ 27 октября 2011

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

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

Мои вопросы:

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

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

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


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

PhoneGap.exec("PixFileDownload.getSystemLanguage");

part 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];

}

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

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

1 Ответ

3 голосов
/ 05 апреля 2012

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

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

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

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

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

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

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

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

Вместо того, чтобы использовать чистый файл JSON, я просто использовал функцию javascript.Это не самое лучшее решение, потому что оно требует минимального обслуживания, но разбор JSON с phonegap / sencha не самый лучший.(Я получаю JSON-файлы от переводчика и быстро вставляю в файл javascript. Занимает около 2 минут, см. Дальнейшие пояснения ниже).Этот файл позволяет использовать 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];
    }
}

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

langSay("about")

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

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

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

word1_word2_word3 : 'word1 word2 word3'

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

...