2013-02-14 5 views
5

Ich erstelle eine HTML5 Mobile App, die auf allen 3 mobilen Plattformen (Android, iOS a, Windows Mobile 8) läuft. Ich benutze Javascript für die Lokalisierung (https://github.com/eligrey/l10n.js/#readme).HTML5 Mobile App Lokalisierung mit Javascript und PhoneGap

Die App funktioniert gut im Browser. Aber wenn ich es auf dem mobilen Emulator bereitstelle, funktioniert die Lokalisierung nicht.

Ich denke, das Problem ist, dass Javascript Sprachinformationen aus dem Browser erhält, aber auf dem Handy führen wir das HTML5 mit PhoneGap.

Gibt es eine Möglichkeit, die Lokalisierung mit Javascript in PhoeGap aktivieren kann.

+3

Wenn Sie Phonegap verwenden, lesen Sie die Kultur über [globalisation.getLocaleName()] (http://docs.phonegap.com/de/2.2 .0/cordova_globalization_globalization.md.html # globalisation.getLocaleName) oder 'globalisation.getPreferredLanguage()' und __nicht__ das navigator Objekt des Browsers, dies ist immer auf "and" für meine Erfahrung auf "en" eingestellt. Siehe auch meinen Post unter Bindestrich/Unterstrich passender Fallstrick – Philzen

+0

Werfen Sie einen Blick hier: https://github.com/EffEPi/localize – Fabrizio

Antwort

2

Ich habe gerade die gleiche Art von Problem gelöst, indem ich eine benutzerdefinierte PhoneGap-Plugins für jede Plattformen erstellt, die nur das aktuelle Gebietsschema des Benutzers zurückgibt.

zum Beispiel auf Android, das Plugin nur überprüft:

var message = Locale.getDefault().getLanguage();

und dann in Javascript Seite, wenn Sie diese Sprache Namen zurück haben, zB. en, würden Sie das JSON-Objekt verwenden, das nach dieser Sprache benannt wurde. Das Beispiel von JSON-Objekt würde wie folgt aussehen:

MyApp.Language = en: { 
    'Player' : 'Player', 
    'Players' : 'Players', 
    'Not Set' : 'Not Set' 
}, 
fi: { 
    'Player' : 'Pelaaja', 
    'Players' : 'Pelaajat', 
    'Not Set' : 'Ei määritetty' 
} 

Das Plugin für Android ist einfach:

JS-Datei

window.localizeMe = { 
    getDefaultLocale: function(callback) { 
     cordova.exec(
      callback, 
      function(err) { 
       callback('Error: ' + err.code); 
      }, 
      "LocalizeMe", 
      "getDefaultLocale", 
      []); 
    } 
} 

Java-Datei

public class LocalizeMe extends CordovaPlugin { 
    @Override 
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
     if (action.equals("getDefaultLocale")) { 
      String message = Locale.getDefault().getLanguage(); 
      this.getDefaultLocale(message, callbackContext); 
      return true; 
     } 
     return false; 
    } 

    private void getDefaultLocale(String message, CallbackContext callbackContext) { 
     if (message != null && message.length() > 0) { 
      callbackContext.success(message); 
     } else { 
      callbackContext.error("Expected one non-empty string argument."); 
     } 
    } 

} 

Und schließlich in der Haupt JS-Datei, setzen Sie Ihre Sprache App:

window.localizeMe.getDefaultLocale(function(result) { 
    if (result != null && result.length > 0) { 
     if (result.toLowerCase().indexOf('fi') !== -1) { 
      MyApp.Lang = MyApp.Language.fi; 
     } else { 
      MyApp.Lang = MyApp.Language.en; 
     } 
    } 
}); 
3

Sie können Ihr eigenes JavaScript schreiben, um die Lokalisierungssprache zu erhalten. Dies ist genau die gleiche Antwort, die ich an anderer Stelle hier geschrieben habe.

Im Allgemeinen funktioniert das JavaScript window.navigator.language normalerweise für iOS und neuere Androids, aber frühere Versionen von Android haben es auf en hardcoded.

Für ältere Androiden empfehle ich, den Sprachparameter aus der UserAgent-Zeichenfolge zu ziehen (ja schnüffeln!), Z.

if (navigator && navigator.userAgent && (androidLang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) { 
    lang = androidLang[1]; 
} 

Hier lang auch die Landesvorwahl (zB 'en-IE') enthalten könnte, so dass Sie vielleicht, dass auch entfernen müssen:

if (lang.indexOf('-') != -1) lang = lang.substring(0, lang.indexOf('-')); 

Dies ist, was ich in einem kürzlich verwendet haben App, mit HTML5 und PhoneGap, und es funktioniert gut.

+0

Auf meinem Android 4.4.4 'window.navigator.language' ergibt' zz-ZZ'. –

1

gibt es eine allgemeine Gefahr mit Lokalisierung, vielleicht ist dies Ihr Problem:
Viele Geräte Schauplätze in Form von de_DE, berichten en_GB usw. - notieren Sie die Unterstreichung.

l10n (oder in meinem Fall, globalize.js) verwenden, um einen Bindestrich Sprache und das Land zu trennen - also keine passende Kultur gefunden und es wird mit dem Standardrückfall auf.

ein console.log in Ihrer Anwendung Legen Sie das Gebietsschema-String, Sie werden immer zu entleeren, geht dann die die Konsole und prüfen Sie mit adb logcat, ob dies der Fall ist auf Ihrem Gerät sein könnte. Dann ändern Sie einfach die Zeichenfolge, um die Übereinstimmung zu ermöglichen (zB locale.value.replace('_', '-'))