2011-01-08 12 views
22

Sto avendo tutti i miei valori di resourcebundle nella tabella e formattato come da requisito. Devo cambiare le lingue nel sito Web in base alla selezione dell'utente nel menu a discesa nella parte superiore della pagina. Se uso il codice della lingua come en_US, allora funziona correttamente. se io uso en-Us come codice della lingua, allora non funziona. Quale potrebbe essere il problema Quale è corretto da seguire?Qual è la differenza tra la creazione di impostazioni locali per en-US e en_US?

risposta

17

"en" è il codice della lingua specifiche ISO 639. mentre gli Stati Uniti è il codice paese designata dal 3166.
In Java, l'oggetto Locale riconosce il linguaggio come languageCode_countryCode (ad esempio en_US) e non come languageCode- countryCode.

21

"en-US" è un IETF language tag. Mentre la classe Java'a Locale era chiaramente basata su tag linguaggio IETF, utilizza underscore al posto di trattini quando si separano i codici lingua dai codici paese (e anche varianti), quindi chiamare toString() sull'equivalente Locale ti darà en_US.

A partire da Java 7 è possibile utilizzare Locale.forLanguageTag(String) e toLanguageTag() per la conversione tra tag di lingua e oggetti Locale.

Quando si convertono le stringhe in oggetti Locale, è consigliabile normalizzare suddividendo i componenti in trattini e caratteri di sottolineatura, in minuscolo il primo componente (il codice lingua) e il maiuscolo il secondo componente (il codice paese).

+0

Questa risposta è la migliore risposta per cosa fare nel codice java. Per altri linguaggi/framework, non così tanto. Quando si effettuano chiamate tra framework con diverse convenzioni, si ha una "pratfall" del coder che ha bisogno di sapere che è necessaria una conversione. consiglia di utilizzare la convenzione del framework da cui stai chiamando. Quando si effettuano chiamate a un altro framework, fornire "proxy" che effettuano la conversione. Perché? elimina la necessità di sapere che il framework chiamato utilizza una convenzione diversa. I contributori "vedranno" SOLO una convenzione usando quella che eviterà la caduta. – DaBlick

6

Oppure è possibile utilizzare Locale us = Locale.forLanguageTag("en-US") e us.toLanguageTag() e questo eseguirà la conversione per te senza dover creare la propria implementazione soggetta a errori. .

1

A partire dal Java8, l'inizializzazione del locale dovrebbe essere fatto utilizzando il tag di lingua "en-US" Locale.forLanguageTag ("en-US") toString(); restituisce l'output: en_US

Dove come Locale.forLinguaTag ("en_US") non crea le impostazioni internazionali richieste. Verrà impostato come predefinito sul sistema. Locale.forLanguageTag ("en_US"). ToString() restituisce null

Problemi correlati