Internalisation Java - Guide rapide

Internalisation

L'internalisation ou I18N fait référence à la capacité d'une application à être en mesure de servir des utilisateurs dans plusieurs langues différentes. Java a un support intégré pour l'internalisation. Java fournit également le formatage des nombres, des devises et l'ajustement de la date et de l'heure en conséquence.

L'internationalisation Java permet à une application Java de gérer différentes langues, formats de nombres, devises, formatage de l'heure spécifique à la région.

Localisation

La localisation ou L10N est l'adaptabilité d'une application, c'est-à-dire comment une application s'adapte à une langue spécifique, des formats de nombres, des paramètres de date et d'heure, etc.

Une application Java doit être internationalisée afin de pouvoir se localiser.

Informations dépendantes de la culture

Les éléments d'information suivants varient souvent selon les fuseaux horaires ou les cultures.

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • Les numéros de téléphone

  • Adresses postales

  • Étiquettes de l'interface graphique

Classes d'internationalisation

Java a un ensemble de classes intégrées qui aident à l'internationalisation d'une application. Ces classes sont les suivantes:

N ° Sr. Classe et description
1

Locale

Représente une langue avec un pays / une région.

2

ResourceBundle

Contient du texte ou des objets localisés.

3

NumberFormat

Utilisez pour formater les nombres / devises selon les paramètres régionaux.

4

DecimalFormat

Utilisez pour formater les nombres selon le format personnalisé et selon les paramètres régionaux.

5

DateFormat

Utilisez pour mettre en forme les dates selon les paramètres régionaux.

6

SimpleDateFormat

Utilisez pour formater les dates selon le format personnalisé et selon les paramètres régionaux.

Internalisation Java - Configuration de l'environnement

Dans ce chapitre, nous aborderons les différents aspects de la configuration d'un environnement convivial pour Java.

Configuration de l'environnement local

Si vous souhaitez toujours configurer votre environnement pour le langage de programmation Java, cette section vous explique comment télécharger et configurer Java sur votre machine. Voici les étapes de configuration de l'environnement.

Java SE est disponible gratuitement à partir du lien Télécharger Java . Vous pouvez télécharger une version basée sur votre système d'exploitation.

Suivez les instructions pour télécharger Java et exécuter le .exepour installer Java sur votre machine. Une fois que vous avez installé Java sur votre machine, vous devrez définir des variables d'environnement pour qu'elles pointent vers les répertoires d'installation corrects -

Configuration du chemin pour Windows

En supposant que vous ayez installé Java dans le répertoire c: \ Program Files \ java \ jdk -

  • Cliquez avec le bouton droit sur «Poste de travail» et sélectionnez «Propriétés».

  • Cliquez sur le bouton "Variables d'environnement" sous l'onglet "Avancé".

  • Maintenant, modifiez la variable «Path» afin qu'elle contienne également le chemin vers l'exécutable Java. Exemple, si le chemin est actuellement défini sur «C: \ WINDOWS \ SYSTEM32», modifiez votre chemin pour lire «C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin».

Configuration du chemin pour Linux, UNIX, Solaris, FreeBSD

La variable d'environnement PATH doit être définie pour pointer vers l'endroit où les binaires Java ont été installés. Reportez-vous à la documentation de votre shell, si vous rencontrez des difficultés pour cela.

Exemple, si vous utilisez bash comme shell, vous ajouteriez la ligne suivante à la fin de votre '.bashrc: export PATH = / chemin / vers / java: $ PATH'

Éditeurs Java populaires

Pour écrire vos programmes Java, vous aurez besoin d'un éditeur de texte. Il existe des IDE encore plus sophistiqués disponibles sur le marché. Mais pour l'instant, vous pouvez envisager l'un des éléments suivants -

  • Notepad - Sur une machine Windows, vous pouvez utiliser n'importe quel éditeur de texte simple comme Notepad (recommandé pour ce tutoriel), TextPad.

  • Netbeans - Un IDE Java open-source et gratuit qui peut être téléchargé depuis https://www.netbeans.org/index.html.

  • Eclipse - Un IDE Java développé par la communauté open-source eclipse et peut être téléchargé depuis https://www.eclipse.org/.

Quelle est la prochaine?

Le chapitre suivant vous apprendra comment écrire et exécuter votre premier programme Java et certaines des syntaxes de base importantes en Java nécessaires au développement d'applications.

Internalisation Java - Classe de paramètres régionaux

Un objet Locale représente une région géographique / politique / culturelle spécifique. Toute opération nécessitant un paramètre régional pour effectuer sa tâche est appelée opération sensible aux paramètres régionaux et utilise les paramètres régionaux pour maîtriser les informations relatives à l'utilisateur. Par exemple, l'affichage d'un nombre est une opération sensible aux paramètres régionaux. Le numéro doit être formaté conformément aux coutumes et conventions du pays, de la région ou de la culture d'origine de l'utilisateur.

Contenu des paramètres régionaux

Un objet Locale contient les éléments suivants:

  • Language- Code de langue ISO 639 alpha-2 ou alpha-3, ou sous-étiquettes de langue enregistrées jusqu'à 8 lettres alpha. Le code alpha-2 doit être utilisé si le code alpha-2 et alpha-3 est présent. Le champ de langue est insensible à la casse, mais Locale est toujours canalisé en minuscules.

  • Script- Code de script ISO 15924 alpha-4. Le champ de script est insensible à la casse, mais les paramètres régionaux sont toujours canoniques en fonction de la casse du titre.

  • Country (region)- Code de pays ISO 3166 alpha-2 ou indicatif régional UN M.49 numérique-3. Le champ country est insensible à la casse, mais les paramètres régionaux sont toujours canoniques en majuscules.

  • Variant- Toute valeur arbitraire utilisée pour indiquer une variation d'un paramètre régional. Lorsqu'il existe deux ou plusieurs valeurs de variante indiquant chacune sa propre sémantique, ces valeurs doivent être classées par ordre d'importance, le plus important en premier, séparé par un trait de soulignement ('_'). Le champ variant est sensible à la casse.

  • Extensions- Une carte des clés de caractère unique aux valeurs de chaîne, indiquant les extensions en dehors de l'identification de la langue. Les extensions de Locale implémentent la sémantique et la syntaxe des sous-étiquettes d'extension BCP 47 et des sous-étiquettes d'utilisation privée. Les extensions sont insensibles à la casse, mais Locale canonise toutes les clés et valeurs d'extension en minuscules.

Internalisation Java - Exemple - Détails des paramètres régionaux

Dans cet exemple, nous obtiendrons les paramètres régionaux par défaut et imprimerons ses détails. Créez ensuite une locale pour "fr" et imprimez ses détails.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale =Locale.getDefault();  

      System.out.println("Default Locale Properties:\n");

      System.out.println(locale.getDisplayCountry());  
      System.out.println(locale.getDisplayLanguage());  
      System.out.println(locale.getDisplayName());  
      System.out.println(locale.getISO3Country());  
      System.out.println(locale.getISO3Language());  
      System.out.println(locale.getLanguage());  
      System.out.println(locale.getCountry());  

      Locale frenchLocale = new Locale("fr","fr");

      System.out.println("\nfr Locale Properties:\n");
      System.out.println(frenchLocale.getDisplayCountry());  
      System.out.println(frenchLocale.getDisplayLanguage());  
      System.out.println(frenchLocale.getDisplayName());  
      System.out.println(frenchLocale.getISO3Country());  
      System.out.println(frenchLocale.getISO3Language());  
      System.out.println(frenchLocale.getLanguage());  
      System.out.println(frenchLocale.getCountry());  
   }
}

Production

Il imprimera le résultat suivant.

Default Locale Properties:

United States
English
English (United States)
USA
eng
en
US

fr Locale Properties:

France
French
French (France)
FRA
fra
fr
FR

Internalisation Java - Exemple - Langue d'affichage

Dans cet exemple, nous obtiendrons la langue d'affichage par locale passée en argument.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale defaultLocale = Locale.getDefault();
      Locale enLocale = new Locale("en", "US");  
      Locale frLocale = new Locale("fr", "FR");  
      Locale esLocale = new Locale("es", "ES");

      System.out.println(defaultLocale.getDisplayLanguage(enLocale));
      System.out.println(defaultLocale.getDisplayLanguage(frLocale));
      System.out.println(defaultLocale.getDisplayLanguage(esLocale));
   }
}

Production

Il imprimera le résultat suivant.

English
anglais
inglés

Internalisation Java - Classe ResourceBundle

La classe ResourceBundle est utilisée pour stocker du texte et des objets sensibles aux paramètres régionaux. En général, nous utilisons des fichiers de propriétés pour stocker du texte spécifique aux paramètres régionaux, puis les représenter à l'aide de l'objet ResourceBundle. Voici les étapes pour utiliser le fichier de propriétés spécifiques aux paramètres régionaux dans une application Java.

Étape 1: Créez des fichiers de propriétés.

Supposons que nous ayons besoin d'un fichier de propriétés pour les paramètres régionaux anglais. Créez ensuite un nom de fichier de propriétés XXX_en_US.properties où XXX est le nom du fichier et en_US représente les paramètres régionaux pour l'anglais (États-Unis).

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

Créons maintenant un fichier de propriétés pour les paramètres régionaux français. Créez ensuite un nom de fichier de propriétés XXX_fr_FR.properties où XXX est le nom du fichier et fr_FR représente les paramètres régionaux du français (France).

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

Ici, vous pouvez comprendre que la clé est la même mais que la valeur est spécifique aux paramètres régionaux dans le fichier de propriétés.

Étape 2: créer un objet ResourceBundle

Créez un objet ResourceBundle avec le nom du fichier de propriétés et les paramètres régionaux en utilisant la syntaxe suivante.

ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);

Étape 3: obtenez la valeur de l'objet ResourceBundle.

Obtenez la valeur de l'objet ResourceBundle en passant la clé.

String value = bundle.getString("message");

Exemple

L'exemple suivant illustre l'utilisation d'objets ResourceBundle pour afficher des valeurs spécifiques aux paramètres régionaux à partir de fichiers de propriétés.

IOTester.java

import java.util.Locale;
import java.util.ResourceBundle;

public class I18NTester {
   public static void main(String[] args) {
      ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);  
      System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));  

      bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);  
      System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
   }
}

Production

Il imprimera le résultat suivant.

Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!

Remarques sur les conventions de dénomination

Voici les conventions de dénomination du fichier de propriétés.

  • Pour le fichier de propriétés mappé sur les paramètres régionaux par défaut, aucun préfixe n'est obligatoire. message_en_US.properties est équivalent à message.properties.

  • Pour le fichier de propriétés mappé sur les paramètres régionaux, le préfixe peut être attaché de deux manières. message_fr.properties est équivalent à message_fr_FR.properties.

Internalisation Java - Classe NumberFormat

La classe java.text.NumberFormat est utilisée pour formater les nombres et les devises selon un paramètre régional spécifique. Les formats numériques varient d'un pays à l'autre. Par exemple, au Danemark, les fractions d'un nombre sont séparées de la partie entière par une virgule alors qu'en Angleterre, elles utilisent un point comme séparateur.

Exemple - Format des nombres

Dans cet exemple, nous formalisons les nombres en fonction des paramètres régionaux américains et danois.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Production

Il imprimera le résultat suivant.

100,76
100.76

Internalisation Java - Formater les devises

Dans cet exemple, nous formalisons les devises en fonction des paramètres régionaux américains et danois.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getCurrencyInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Production

Il imprimera le résultat suivant.

kr 100,76
$100.76

Internalisation Java - Pourcentages de format

Dans cet exemple, nous mettons en forme les nombres au format pourcentage.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");        

      NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);

      System.out.println(numberFormat.format(0.76));    
   }
}

Production

Il imprimera le résultat suivant.

76%

Internalisation Java - Définir la précision min / max

Dans cet exemple, nous définissons les chiffres minimum et maximum pour les entiers et les parties fractionnaires d'un nombre.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  

      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
      numberFormat.setMinimumIntegerDigits(2);
      numberFormat.setMaximumIntegerDigits(3);

      numberFormat.setMinimumFractionDigits(2);
      numberFormat.setMaximumFractionDigits(3);

      System.out.println(numberFormat.format(12234.763443));
   }
}

Production

Il imprimera le résultat suivant.

234.763

Internalisation Java - Définir le mode d'arrondi

Dans cet exemple, nous présentons le mode d'arrondi.

IOTester.java

import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
 
      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);

      numberFormat.setMinimumFractionDigits(0);
      numberFormat.setMaximumFractionDigits(0);

      System.out.println(numberFormat.format(99.50));

      numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);

      System.out.println(numberFormat.format(99.50));
   }
}

Production

Il imprimera le résultat suivant.

100
99

Internalisation Java - Analyse des nombres

Dans cet exemple, nous présentons l'analyse du nombre présent dans différents paramètres régionaux.

IOTester.java

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.parse("100,76"));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.parse("100,76"));
   }
}

Production

Il imprimera le résultat suivant.

100.76
10076

Internalisation Java - Classe DecimalFormat

La classe java.text.DecimalFormat est utilisée pour le formatage des nombres selon le format personnalisé et selon les paramètres régionaux.

Exemple - Format des nombres

Dans cet exemple, nous formons des nombres en fonction d'un modèle donné.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "####,####.##";
      double number = 123456789.123;
      
      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);
      
      System.out.println(numberFormat.format(number));
   }
}

Production

Il imprimera le résultat suivant.

1.23456789123E8
1,2345,6789.12

Internalisation Java - Modèles de format

Ce qui suit est l'utilisation de caractères dans les modèles de formatage.

N ° Sr. Classe et description
1

0

Pour afficher 0 si moins de chiffres sont présents.

2

#

Pour afficher les zéros de début d'engagement de chiffres.

3

.

Séparateur décimal.

4

,

Séparateur de regroupement.

5

E

Séparateur mantisse et exposant pour les formats exponentiels.

6

;

Séparateur de format.

sept

-

Préfixe numérique négatif.

8

%

Affiche le nombre en pourcentage après avoir multiplié par 100.

9

?

Affiche le nombre en mille après avoir multiplié par 1000.

dix

X

Pour marquer le caractère comme préfixe / suffixe numérique.

11

'

Pour marquer la citation autour des caractères spéciaux.

Dans cet exemple, nous formons des nombres en fonction de différents modèles.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.###";
      double number = 123456789.123;

      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);

      //pattern ###.###
      System.out.println(numberFormat.format(number));

      //pattern ###.#
      numberFormat.applyPattern("###.#");
      System.out.println(numberFormat.format(number));

      //pattern ###,###.##
      numberFormat.applyPattern("###,###.##");
      System.out.println(numberFormat.format(number));

      number = 9.34;

      //pattern 000.###
      numberFormat.applyPattern("000.##");
      System.out.println(numberFormat.format(number));           
   }
}

Production

Il imprimera le résultat suivant.

1.23456789123E8
1,2345,6789.12

Internalisation Java - DecimalFormat spécifique aux paramètres régionaux

Par défaut, l'objet DecimalFormat utilise les paramètres régionaux de la JVM. Nous pouvons changer les paramètres régionaux par défaut lors de la création de l'objet DecimalFormat à l'aide de la classe NumberFormat. Dans l'exemple ci-dessous, nous utiliserons le même modèle pour deux paramètres régionaux différents et vous pourrez repérer la différence dans la sortie.

IOTester.java

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.##";
      double number = 123.45;

      Locale enlocale  = new Locale("en", "US");
      Locale dalocale  = new Locale("da", "DK");

      DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));
   

      decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));     
   }
}

Production

Il imprimera le résultat suivant.

123.45
123,45

Internalisation Java - Classe DecimalFormatSymbols

En utilisant la classe DecimalFormatSymbols, les symboles de séparation par défaut, les symboles de séparation de groupe, etc. peuvent être modifiés. L'exemple suivant illustre la même chose.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Production

Il imprimera le résultat suivant.

126,473.457
126:473;457

Internalisation Java - Regroupement des chiffres

En utilisant la méthode setGroupingSize () de DecimalFormat, le regroupement par défaut des nombres peut être modifié. L'exemple suivant illustre la même chose.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      double number = 121223232473.4567;

      DecimalFormat decimalFormat = new DecimalFormat();

      System.out.println(number);
      System.out.println(decimalFormat.format(number));
   

      decimalFormat.setGroupingSize(4);
      System.out.println(decimalFormat.format(number));
   
   }
}

Production

Il imprimera le résultat suivant.

1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457

Internalisation Java - Classe DateFormat

La classe java.text.DateFormat met en forme les dates selon les paramètres régionaux. Comme différents pays utilisent différents formats pour afficher les dates. Cette classe est extrêmement utile pour traiter les dates dans l'internalisation de l'application. L'exemple suivant montre comment créer et utiliser la classe DateFormat.

IOTester.java

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale = new Locale("da","DK");

      DateFormat dateFormat = DateFormat.getDateInstance();

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);

      System.out.println(dateFormat.format(new Date()));
   }
}

Production

Il imprimera le résultat suivant.

Nov 29, 2017
29-11-2017

Internalisation Java - Formatage des dates

La classe DateFormat fournit différents formats pour formater la date. Voici la liste de certains des formats.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

Dans l'exemple suivant, nous montrerons comment utiliser différents formats.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Production

Il imprimera le résultat suivant.

Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017

Internalisation Java - Temps de formatage

La classe DateFormat fournit différents formats pour formater l'heure. La méthode DateFormat.getTimeInstance () doit être utilisée. Voir l'exemple ci-dessous.

Dans l'exemple suivant, nous montrerons comment utiliser différents formats pour formater l'heure.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Production

Il imprimera le résultat suivant.

4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST

Internalisation Java - Formatage de la date et de l'heure

La classe DateFormat fournit différents formats pour formater la date et l'heure ensemble. La méthode DateFormat.getDateTimeInstance () doit être utilisée. Voir l'exemple ci-dessous.

Dans l'exemple suivant, nous montrerons comment utiliser différents formats pour formater la date et l'heure.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {

      DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  

   }
}

Production

Il imprimera le résultat suivant.

Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST

Internalisation Java - Classe SimpleDateFormat

La classe java.text.SimpleDateFormat met en forme les dates selon le modèle donné. Il est également utilisé pour analyser les dates de la chaîne où la chaîne contient la date au format mentionné. Consultez l'exemple suivant d'utilisation de la classe SimpleDateFormat.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      String pattern = "dd-MM-yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      String dateText = "29-11-2017";

      date = simpleDateFormat.parse(dateText);

      System.out.println(simpleDateFormat.format(date));
   }
}

Production

Il imprimera le résultat suivant.

Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017

Internalisation Java - SimpleDateFormat spécifique aux paramètres régionaux

Les paramètres régionaux peuvent être utilisés pour créer un formatage spécifique aux paramètres régionaux sur un modèle dans la classe SimpleDateFormat. Consultez l'exemple suivant d'utilisation de la classe SimpleDateFormat spécifique aux paramètres régionaux.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      Locale locale = new Locale("da", "DK");
      String pattern = "EEEEE MMMMM yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      simpleDateFormat = new SimpleDateFormat(pattern,locale);

      System.out.println(simpleDateFormat.format(date));
   }
}

Production

Il imprimera le résultat suivant.

Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017

Internalisation Java - Classe DecimalFormatSymbols

En utilisant la classe DecimalFormatSymbols, les symboles de séparation par défaut, les symboles de séparation de groupe, etc. peuvent être modifiés. L'exemple suivant illustre la même chose.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Production

Il imprimera le résultat suivant.

126,473.457
126:473;457

Internalisation Java - Modèles de format de date

Ce qui suit est l'utilisation de caractères dans les modèles de formatage de date.

N ° Sr. Classe et description
1

G

Pour afficher Era.

2

y

Pour afficher l'année. Valeurs valides yy, yyyy.

3

M

Pour afficher le mois. Valeurs valides MM, MMM ou MMMMM.

4

d

Pour afficher le jour du mois. Valeurs valides d, dd.

5

h

Pour afficher l'heure du jour (1-12 AM / PM). Valeur valide hh.

6

H

Pour afficher l'heure du jour (0-23). Valeur valide HH.

sept

m

Pour afficher les minutes de l'heure (0-59). Valeur valide mm.

8

s

Pour afficher les secondes des minutes (0-59). Valeur valide ss.

9

S

Pour afficher des millisecondes de minute (0-999). Valeur valide SSS.

dix

E

Pour afficher le jour de la semaine (par exemple, lundi, mardi, etc.)

11

D

Pour afficher le jour de l'année (1-366).

12

F

Pour afficher le jour de la semaine dans le mois (par exemple le 1er jeudi de décembre).

13

w

Pour afficher la semaine dans l'année (1-53).

14

W

Pour afficher la semaine dans le mois (0-5)

15

a

Pour afficher AM / PM

16

k

Pour afficher l'heure dans la journée (1-24).

17

K

Pour afficher l'heure dans la journée, AM / PM (0-11).

18

z

Pour afficher le fuseau horaire.

Dans cet exemple, nous formalisons les dates en fonction de différents modèles.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      String pattern = "dd-MM-yy";
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
      Date date = new Date();
      System.out.println(simpleDateFormat.format(date));

      pattern = "MM-dd-yyyy";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "yyyy-MM-dd HH:mm:ss";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));
}
}

Production

Il imprimera le résultat suivant.

29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530

Internalisation Java - UTC

UTC signifie temps universel coordonné. C'est la norme de temps et est couramment utilisé dans le monde entier. Tous les fuseaux horaires sont calculés comparativement avec UTC comme décalage. Par exemple, l'heure à Copenhague, au Danemark, est UTC + 1 signifie l'heure UTC plus une heure. Il est indépendant des économies de lumière du jour et doit être utilisé pour stocker la date et l'heure dans les bases de données.

Conversion des fuseaux horaires

L'exemple suivant présentera la conversion de divers fuseaux horaires. Nous imprimerons l'heure du jour et l'heure en millisecondes. Le premier variera et le second restera le même.

IOTester.java

import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      Calendar date = new GregorianCalendar();

      date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
      date.set(Calendar.HOUR_OF_DAY, 12);

      System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("UTC: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
      System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("CPH: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
      System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("NYC: " + date.getTimeInMillis());
   }
}

Production

Il imprimera le résultat suivant.

UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540

Fuseaux horaires disponibles

L'exemple suivant présentera les fuseaux horaires disponibles avec le système.

IOTester.java

import java.text.ParseException;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      String[] availableIDs = TimeZone.getAvailableIDs();

      for(String id : availableIDs) {
         System.out.println("Timezone = " + id);
      }
   }
}

Production

Il imprimera le résultat suivant.

Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST

Internalisation Java - Conversion Unicode de / vers une chaîne

En java, le texte est stocké en interne au format Unicode. Si l'entrée / sortie est dans un format différent, une conversion est nécessaire.

Conversion

L'exemple suivant présente la conversion d'une chaîne Unicode en octet UTF8 [] et de l'octet UTF8 [] en octet Unicode [].

IOTester.java

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, UnsupportedEncodingException {

      String unicodeString = "\u00C6\u00D8\u00C5" ;

      //convert Unicode to UTF8 format
      byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
      printBytes(utf8Bytes, "UTF 8 Bytes");

      //convert UTF8 format to Unicode
      String converted = new String(utf8Bytes, "UTF8");
      byte[] unicodeBytes = converted.getBytes();
      printBytes(unicodeBytes, "Unicode Bytes");
   }

   public static void printBytes(byte[] array, String name) {
      for (int k = 0; k < array.length; k++) {
         System.out.println(name + "[" + k + "] = " + array[k]);
          
      }
   }
}

Production

Il imprimera le résultat suivant.

UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59

Internalisation Java - Conversion Unicode de / vers lecteur / enregistreur

Les classes Reader et Writer sont des classes de flux orientées caractères. Ceux-ci peuvent être utilisés pour lire et convertir des caractères Unicode.

Conversion

L'exemple suivant présente la conversion d'une chaîne Unicode en octet UTF8 [] et de l'octet UTF8 [] en octet Unicode [] à l'aide des classes Reader et Writer.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, IOException {

      String input = "This is a sample text" ;

      InputStream inputStream = new ByteArrayInputStream(input.getBytes());

      //get the UTF-8 data
      Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

      //convert UTF-8 to Unicode
      int data = reader.read();
      while(data != -1){
         char theChar = (char) data;
         System.out.print(theChar);
         data = reader.read();
      }
      reader.close();

      System.out.println();

      //Convert Unicode to UTF-8 Bytes
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));

      writer.write(input);
      writer.close();

      String out = new String(outputStream.toByteArray());
   
      System.out.println(out);
   }  
}

Production

Il imprimera le résultat suivant.

This is a sample text
This is a sample text
Impression