2016-03-08 2 views
3

La langue serbe a les alphabets latin et cyrillique. Dans les widgets Sélecteur de date et d'heure d'Android, l'alphabet affiché pour les locales serbes semble être en cyrillique, comme indiqué ici.Comment changer les paramètres régionaux pour utiliser le latin serbe (au lieu du serbe cyrillique)

enter image description here

Je voulais modifier les paramètres régionaux de sorte que les widgets Android utilisent l'alphabet latin serbe.

Le code de langue/pays actuel (cédant en cyrillique) est respectivement sr et RS. Par conséquent, ma fonction setLocale est appelée

setLocale("sr", "RS"); 

Ceci est la partie je ne suis pas sûr - selon localeplanet.com, le code local pour latin est Serbian sr_Latn_RS. Cependant, j'ai essayé les deux

setLocale("sr_Latn", "RS"); 
//and 
setLocale("sr_Latn_RS", "RS"); 

qui ne fonctionnent pas (pas de changement, par défaut en anglais). Selon la documentation Android, il semble que setLocale attend deux codes de lettre.

Les codes de langue sont des codes en minuscules langue ISO à deux lettres (par exemple "en") tel que défini par la norme ISO 639-1. Les codes de pays sont des codes de pays ISO à en deux lettres (tels que "US") tels que définis par l'ISO 3166-1. Les codes de variantes ne sont pas spécifiés.

Alors, comment puis-je spécifier un code de langue latine serbe? Ou n'existe-t-il pas?

Répondre

-1

Pouvez-vous s'il vous plaît utiliser ci-dessous un?

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 

     Resources res = this.getResources(); 
     Configuration conf = res.getConfiguration(); 
     boolean isLatinAlphabet = PreferenceManager.getDefaultSharedPreferences(this); 

     if(conf.locale.getLanguage().equals("sr") && isLatinAlphabet) { 
      conf.locale = new Locale("sr", "YourContryCode"); 
      res.updateConfiguration(conf, res.getDisplayMetrics()); 
     } 
    } 
} 

Note: Remplacez votre YourContryCode en ligne conf.locale = new Locale("sr", "YourContryCode");.

Manifest.xml:

<application 
     android:name=".MyApplication" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/application_name" 
     android:theme="@style/AppTheme"> 

    ... 

</application> 

Espérons que cela vous aidera.

0

S'il vous plaît chercher votre requête avant de poster une question. Il peut être répondu sous une autre forme connexe.

Locale newLocale = new Locale("sr","RS"); 
    Configuration config = new Configuration(); 
    config.setLocale(newLocale); 
    // using this to reference my Activity 
    this.getBaseContext().getResources().updateConfiguration(config, this.getBaseContext().getResources().getDisplayMetrics()); 

je trouve ces deux réponses adaptées à votre requête android custom date-picker SO et locale from english to french.

EDIT

Locale[] locales = Locale.getAvailableLocales(); 
    for(Locale locale : locales){ 
     if(locale.getCountry().equalsIgnoreCase("RS") 
       && locale.getScript().equalsIgnoreCase("Latn")) 
     { 
      Configuration config = new Configuration(); 
      config.setLocale(locale); 
      // using this to reference my Activity 
      this.getBaseContext().getResources().updateConfiguration(config, this.getBaseContext().getResources().getDisplayMetrics()); 
      break; 
     } 
    } 

Je sais qu'il y aura un moyen efficace de le faire, mais vous pouvez obtenir la direction que vous avez besoin pour obtenir la liste des paramètres régionaux disponibles et obtenir les paramètres régionaux que vous désirez.Hope it helps

EDIT-2 (version finale)

vous pouvez construire les paramètres régionaux en utilisant:

Locale locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build(); 
setLocale(locale); 
+1

haha, ok là-dessus, le titre était un peu trompeur, mais je fais mes recherches pour vous aider à trouver la réponse –

+0

fait Eric, vous pouvez utiliser la dernière édition. Désolé pour autant de modifications –

+0

Merci, je vais essayer ça. –

1

La réponse précédente fonctionne bien si vous soutenez que Lollipop ou au-dessus. Cependant, si vous codez en serbe, une grande partie de votre base d'utilisateurs ne l'aura probablement pas. Voici une solution qui fonctionne pour les anciennes et les nouvelles versions.

private static Locale serbianLatinLocale(){ 

    Locale locale = null; 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
     for (Locale checkLocale : Locale.getAvailableLocales()) { 
      if (checkLocale.getISO3Language().equals("srp") && checkLocale.getCountry().equals("LATN") && checkLocale.getVariant().equals("")) { 
       locale = checkLocale; 
      } 
     } 
    } else { 
     locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("Latn").build(); 
    } 

    return locale; 
}