2017-05-25 1 views
0

J'ai recherché une solution, mais je n'en ai trouvé aucune.Traduire le nom du pays dans une autre langue

Je possède ce genre d'information:

String locale = "en_GB"; 
String country = "Japonia"; //It means Japan in polish 

Je dois traduire le nom du pays « Japonia » dans la langue locale indiquée dans la chaîne, de sorte que « le Japon ». Y a-t-il un moyen de le faire?

+2

C'est possible, mais vous devrez fournir la traduction. Java ne vient pas avec tous les pays traduits dans toutes les langues, si c'est votre question. –

+3

'System.out.printf ("% s% s% n ", Locale.JAPAN.getDisplayCountry (Locale.ENGLISH), Locale.JAPAN.getDisplayCountry (Locale.forLanguageTag (" pl-PL ")));' –

+2

I stand corrigé :-) –

Répondre

1

En supposant que vous savez aussi bien la langue d'entrée et la langue de sortie souhaitée, une autre approche - itérer les Locale (s) sur le système utilisant Locale.getAvailableLocales(), vérifiez si le nom du pays correspond au souhaité dansLocale - si l'affichage de sorte dans la sortie désirée Locale utilisant getDisplayCountry(Locale)

String country = "Japonia"; 
Locale outLocale = Locale.forLanguageTag("en_GB"); 
Locale inLocale = Locale.forLanguageTag("pl-PL"); 
for (Locale l : Locale.getAvailableLocales()) { 
    if (l.getDisplayCountry(inLocale).equals(country)) { 
     System.out.println(l.getDisplayCountry(outLocale)); 
     break; 
    } 
} 

Sorties

Japan 

Et si vous modifiez le outLocale comme

Locale outLocale = Locale.forLanguageTag("es-SP"); 

vous

Japón 
+0

Merci, c'est ce dont j'ai besoin. Je pensais à cette solution, mais je me demandais simplement s'il y avait une façon différente de résoudre ce problème :) – pjdev

+0

Avoir un autre petit problème et vous pourriez savoir comment le résoudre. J'ai besoin de traduire le pays qui dans le nom a des caractères polonais, par exemple: Włochy (signifie l'Italie). Je lis à partir du fichier correctement avec l'encodage Cp1250, mais il ne trouve pas la traduction. – pjdev

3

Oui, vous pouvez utiliser une API de traduction. Comme ou Google's.

4

(réponse basée sur comment by Elliott Frisch)

Java Runtime Library ne dispose pas d'une API de traduction, mais la classe Locale peut être utilisé pour obtenir le nom d'un pays dans toutes les langues, aussi longtemps que vous connaître le ISO 3166 alpha-2 country code, et le ISO 639 alpha-2 or alpha-3 language code.

Exemple pour le pays Japan:

Locale countryJapan = new Locale.Builder().setRegion("JP"/*Japan*/).build(); 
Locale langEnglish = new Locale.Builder().setLanguage("en"/*English*/).build(); 
Locale langPolish = new Locale.Builder().setLanguage("pl"/*Polish*/).build(); 
Locale langJapanese = new Locale.Builder().setLanguage("ja"/*Japanese*/).build(); 
Locale langItalian = new Locale.Builder().setLanguage("it"/*Italian*/).build(); 
System.out.println(countryJapan.getDisplayCountry(langEnglish)); 
System.out.println(countryJapan.getDisplayCountry(langPolish)); 
System.out.println(countryJapan.getDisplayCountry(langJapanese)); 
System.out.println(countryJapan.getDisplayCountry(langItalian)); 

Sortie

Japan 
Japonia 
日本 
Giappone 
+1

Cela ne fonctionne pas pour toutes les langues (par exemple tchèque). – James

+0

@James En quoi ça ne marche pas? Et si les valeurs d'affichage 'Locale' sont incorrectes, vous devez déposer un bogue pour Java. – Andreas

+0

Si j'essaye votre approche pour traduire la langue de l'exemple en tchèque, je reçois la version anglaise à la place. Je l'ai essayé pour d'autres langues aussi, pour beaucoup cela fait la même chose. – James