Ricerca…


Osservazioni

Java è dotato di un meccanismo potente e flessibile per localizzare le tue applicazioni, ma è anche facile da usare impropriamente e finire con un programma che ignora o manipola le impostazioni locali dell'utente, e quindi come si aspettano che il tuo programma si comporti.

I tuoi utenti si aspetteranno di vedere i dati localizzati nei formati a cui sono abituati, e il tentativo di supportarli manualmente è un errore. Qui c'è solo un piccolo esempio dei diversi modi in cui gli utenti si aspettano di vedere il contenuto che si potrebbe presumere sia "sempre" visualizzato in un certo modo:

Date Numeri Moneta locale Moneta straniera distanze
Brasile
Cina
Egitto
Messico 20/3/16 1.234,56 $ 1,000.50 1.000,50 USD
UK 20/3/16 1,234.56 £ 1,000.50 100 km
Stati Uniti d'America 3/20/16 1,234.56 $ 1,000.50 1,000.50 MXN 60 miglia

Risorse generali

Risorse Java

Date formattate automaticamente usando "locale"

SimpleDateFormatter è ottimo in un pizzico, ma come suggerisce il nome, non scala bene.

Se digiti "MM/dd/yyyy" su tutta la tua applicazione, i tuoi utenti internazionali non saranno felici.

Lascia che Java faccia il lavoro per te

Utilizzare i metodi static in DateFormat per recuperare la formattazione corretta per l'utente. Per un'applicazione desktop (dove ti affidi alle impostazioni internazionali predefinite ), chiama semplicemente:

String localizedDate = DateFormat.getDateInstance(style).format(date);

Dove lo style è una delle costanti di formattazione ( FULL , LONG , MEDIUM , SHORT , ecc.) Specificate in DateFormat .

Per un'applicazione lato server in cui l'utente specifica la propria locale come parte della richiesta, è necessario passarla esplicitamente a getDateInstance() :

String localizedDate =
    DateFormat.getDateInstance(style, request.getLocale()).format(date);

Confronto di stringhe

Confronta due stringhe che ignorano il caso:

"School".equalsIgnoreCase("school"); // true

Non usare

text1.toLowerCase().equals(text2.toLowerCase());

Le lingue hanno regole diverse per la conversione di lettere maiuscole e minuscole. Un "I" verrebbe convertito in "i" in inglese. Ma in turco un 'io' diventa un 'io'. Se devi usare toLowerCase() usa il sovraccarico che si aspetta un Locale : String.toLowerCase(Locale) .

Confrontando due stringhe ignorando le differenze minori:

Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.PRIMARY);
collator.equals("Gärten", "gaerten"); // returns true

Ordina le stringhe rispettando l'ordine della lingua naturale, ignorando il caso (usa la chiave di confronto per:

String[] texts = new String[] {"Birne", "äther", "Apfel"};
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY); // ignore case
Arrays.sort(texts, collator::compare); // will return {"Apfel", "äther", "Birne"}

località

La classe java.util.Locale viene utilizzata per rappresentare una regione "geografica, politica o culturale" per localizzare un determinato testo, numero, data o operazione. Un oggetto Locale può quindi contenere un paese, una regione, una lingua e anche una variante di una lingua, ad esempio un dialetto parlato in una certa regione di un paese, o parlato in un paese diverso dal paese da cui proviene la lingua.

L'istanza Locale viene consegnata ai componenti che devono localizzare le loro azioni, sia che si tratti di convertire l'input, l'output o semplicemente di averne bisogno per le operazioni interne. La classe Locale non può effettuare internazionalizzazione o localizzazione da sola

linguaggio

La lingua deve essere un codice lingua ISO 639 a 2 o 3 caratteri o una sottotag della lingua registrata composta da un massimo di 8 caratteri. Nel caso in cui una lingua abbia un codice lingua a 2 e 3 caratteri, utilizzare il codice a 2 caratteri. Un elenco completo dei codici di lingua può essere trovato nel registro di sottotag della lingua IANA.

I codici lingua non fanno distinzione tra maiuscole e minuscole, ma la classe Locale utilizza sempre le versioni minuscole dei codici lingua

Creare un locale

La creazione di un'istanza java.util.Locale può essere eseguita in quattro modi diversi:

Locale constants
Locale constructors
Locale.Builder class
Locale.forLanguageTag factory method 

Java ResourceBundle

Si crea un'istanza ResourceBundle in questo modo:

Locale locale = new Locale("en", "US");
ResourceBundle labels = ResourceBundle.getBundle("i18n.properties");
System.out.println(labels.getString("message"));

Considera che ho un file di proprietà i18n.properties :

message=This is locale

Produzione:

This is locale

Impostazione locale

Se si desidera riprodurre lo stato utilizzando altre lingue, è possibile utilizzare il metodo setDefault() . Il suo uso:

 setDefault(Locale.JAPANESE); //Set Japanese


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow