Java Language
Localisation et internationalisation
Recherche…
Remarques
Java est fourni avec un mécanisme puissant et flexible pour la localisation de vos applications, mais il est également facile d’utiliser un programme qui ignore ou modifie les paramètres régionaux de l’utilisateur, et donc son comportement.
Vos utilisateurs s'attendent à voir les données localisées dans les formats auxquels ils sont habitués, et tenter de les prendre en charge manuellement est une erreur. Voici juste un petit exemple des différentes manières dont les utilisateurs s'attendent à voir le contenu que vous pouvez supposer être "toujours" affiché d'une certaine manière:
Rendez-vous | Nombres | Monnaie locale | Monnaie étrangère | Distances | |
---|---|---|---|---|---|
Brésil | |||||
Chine | |||||
Egypte | |||||
Mexique | 20/3/16 | 1.234,56 | 1 000,50 $ | 1,000.50 USD | |
Royaume-Uni | 20/3/16 | 1 234,56 | £ 1,000.50 | 100 km | |
Etats-Unis | 20/03/16 | 1 234,56 | 1 000,50 $ | 1,000.50 MXN | 60 mi |
Ressources générales
- Wikipedia: Internationalisation et localisation
Ressources Java
- Tutoriel Java: Internationalisation
- Oracle: Internationalisation: Comprendre les paramètres régionaux dans la plate-forme Java
- JavaDoc:
Locale
Format automatique des dates en utilisant "locale"
SimpleDateFormatter
est génial dans un pincement, mais comme son nom l'indique, il ne s'adapte pas bien.
Si vous codez "MM/dd/yyyy"
sur votre application, vos utilisateurs internationaux ne seront pas contents.
Laissez Java faire le travail pour vous
Utilisez les méthodes static
dans DateFormat
pour récupérer le format correct pour votre utilisateur. Pour une application de bureau (sur laquelle vous comptez sur les paramètres régionaux par défaut ), appelez simplement:
String localizedDate = DateFormat.getDateInstance(style).format(date);
Où style
est l'une des constantes de formatage ( FULL
, LONG
, MEDIUM
, SHORT
, etc.) spécifiées dans DateFormat
.
Pour une application côté serveur dans laquelle l'utilisateur spécifie ses paramètres régionaux dans le cadre de la requête, vous devez le transmettre explicitement à getDateInstance()
place:
String localizedDate =
DateFormat.getDateInstance(style, request.getLocale()).format(date);
Comparaison de chaîne
Comparez deux chaînes en ignorant la casse:
"School".equalsIgnoreCase("school"); // true
Ne pas utiliser
text1.toLowerCase().equals(text2.toLowerCase());
Les langues ont des règles différentes pour convertir les majuscules et les minuscules. Un "je" serait converti en "i" en anglais. Mais en turc, un «je» devient un «ı». Si vous devez utiliser toLowerCase()
utiliser la surcharge qui attend une Locale
: String.toLowerCase(Locale)
.
En comparant deux chaînes en ignorant les différences mineures:
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.PRIMARY);
collator.equals("Gärten", "gaerten"); // returns true
Trier les chaînes en respectant l'ordre du langage naturel, en ignorant la casse (utilisez la clé de classement pour:
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"}
Lieu
La classe java.util.Locale
est utilisée pour représenter une région "géographique, politique ou culturelle" permettant de localiser un texte, un numéro, une date ou une opération donnés. Un objet Locale peut donc contenir un pays, une région, une langue et également une variante d'une langue, par exemple un dialecte parlé dans une certaine région d'un pays ou parlé dans un pays différent du pays d'origine de la langue.
L'instance de paramètres régionaux est transmise aux composants qui doivent localiser leurs actions, que ce soit pour convertir l'entrée, la sortie ou simplement en avoir besoin pour des opérations internes. La classe Locale ne peut effectuer aucune internationalisation ou localisation par elle-même
La langue
La langue doit être un code de langue ISO 639 2 ou 3 caractères, ou une sous-étiquette de langue enregistrée de 8 caractères maximum. Si une langue a à la fois un code de langue à 2 et 3 caractères, utilisez le code à 2 caractères. Une liste complète des codes de langue se trouve dans le registre des sous-étiquettes de langues de l'IANA.
Les codes de langue sont insensibles à la casse, mais la classe Locale utilise toujours des versions minuscules des codes de langue
Créer une locale
La création d'une instance java.util.Locale
peut se faire de quatre manières différentes:
Locale constants
Locale constructors
Locale.Builder class
Locale.forLanguageTag factory method
Java ResourceBundle
Vous créez une instance ResourceBundle comme ceci:
Locale locale = new Locale("en", "US");
ResourceBundle labels = ResourceBundle.getBundle("i18n.properties");
System.out.println(labels.getString("message"));
Considère que j'ai un fichier de propriétés i18n.properties
:
message=This is locale
Sortie:
This is locale
Réglage des paramètres régionaux
Si vous souhaitez reproduire l'état en utilisant d'autres langages, vous pouvez utiliser la méthode setDefault()
. Son utilisation:
setDefault(Locale.JAPANESE); //Set Japanese