Ho appena risolto lo stesso tipo di problema creando un plug-in personalizzato PhoneGap per ogni piattaforma che restituisce solo le impostazioni locali dell'utente.
per esempio, su Android, il plugin controlla solo:
var message = Locale.getDefault().getLanguage();
e poi in JavaScript lato, quando hai quel nome lingua indietro, ad esempio. en
, si utilizzerà l'oggetto JSON che ha chiamato dopo quella lingua. L'esempio di oggetto JSON sarebbe simile a questa:
MyApp.Language = en: {
'Player' : 'Player',
'Players' : 'Players',
'Not Set' : 'Not Set'
},
fi: {
'Player' : 'Pelaaja',
'Players' : 'Pelaajat',
'Not Set' : 'Ei määritetty'
}
Il plugin per Android è semplice come questo:
file di
JS
window.localizeMe = {
getDefaultLocale: function(callback) {
cordova.exec(
callback,
function(err) {
callback('Error: ' + err.code);
},
"LocalizeMe",
"getDefaultLocale",
[]);
}
}
file di Java
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.");
}
}
}
E, infine, nel file JS principale, è possibile impostare la lingua del vostro 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;
}
}
});
Se stai utilizzando PhoneGap, assicurati di leggere la cultura tramite [globalization.getLocaleName()] (http://docs.phonegap.com/en/2.2 .0/cordova_globalization_globalization.md.html # globalization.getLocaleName) o 'globalization.getPreferredLanguage()' e __not__ l'oggetto navigatore del browser, questo è sempre impostato su "en" su Android per la mia esperienza. Inoltre, vedi il mio post qui sotto per quanto riguarda il trattino/underscore matching pitfall – Philzen
Date un'occhiata qui: https://github.com/EffEPi/localize – Fabrizio