Zoeken…


Opmerkingen

Java wordt geleverd met een krachtig en flexibel mechanisme voor het lokaliseren van uw toepassingen, maar het is ook gemakkelijk te misbruiken en te eindigen met een programma dat de landinstelling van de gebruiker negeert of vervormt, en dus hoe zij verwachten dat uw programma zich gedraagt.

Uw gebruikers verwachten dat gegevens worden gelokaliseerd in de formaten die ze gewend zijn, en proberen dit handmatig te ondersteunen is een dwaze boodschap. Hier is slechts een klein voorbeeld van de verschillende manieren waarop gebruikers verwachten dat inhoud waarvan u denkt dat deze "altijd" op een bepaalde manier wordt weergegeven:

data Numbers Lokale munteenheid Buitenlandse valuta Afstanden
Brazilië
China
Egypte
Mexico 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
Verenigde Staten van Amerika 3/20/16 1,234.56 $ 1,000.50 1.000,50 MXN 60 mijl

Algemene bronnen

Java-bronnen

Datums automatisch opgemaakt met 'locale'

SimpleDateFormatter is geweldig in een snuifje, maar zoals de naam al doet vermoeden is het niet goed schaalbaar.

Als u "MM/dd/yyyy" in uw toepassing hard codeert, zullen uw internationale gebruikers niet tevreden zijn.

Laat Java het werk voor u doen

Gebruik de static methoden in DateFormat om de juiste opmaak voor uw gebruiker op te halen. Voor een desktoptoepassing (waarbij u zult vertrouwen op de standaardlocale ), belt u eenvoudig:

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

Waar style een van de opmaakconstanten is ( FULL , LONG , MEDIUM , SHORT , enz.) Opgegeven in DateFormat .

Voor een server-side applicatie waarbij de gebruiker zijn locale opgeeft als onderdeel van het verzoek, moet je dit expliciet doorgeven aan getDateInstance() plaats daarvan:

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

String vergelijking

Vergelijk twee tekenreeksen die case negeren:

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

Niet gebruiken

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

Talen hebben verschillende regels voor het omzetten van hoofdletters en kleine letters. Een 'I' zou worden omgezet in 'i' in het Engels. Maar in het Turks wordt een 'ik' een 'ı'. Als u toLowerCase() gebruiken, gebruikt u de overbelasting die een Locale : String.toLowerCase(Locale) .

Twee strings vergelijken waarbij kleine verschillen worden genegeerd:

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

Sorteer strings met inachtneming van de natuurlijke taalvolgorde, zonder hoofdlettergebruik (gebruik de sorteertoets om:

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"}

locale

De klasse java.util.Locale wordt gebruikt om een "geografische, politieke of culturele" regio voor te stellen om een gegeven tekst, nummer, datum of operatie te lokaliseren. Een object Locale kan dus een land, regio, taal en ook een variant van een taal bevatten, bijvoorbeeld een dialect dat in een bepaalde regio van een land wordt gesproken, of in een ander land wordt gesproken dan het land waaruit de taal afkomstig is.

De instantie Locale wordt overhandigd aan componenten die hun acties moeten lokaliseren, of het nu de invoer, uitvoer of gewoon voor interne bewerkingen is. De klasse Locale kan op zichzelf geen internationalisatie of lokalisatie uitvoeren

Taal

De taal moet een ISO 639 taalcode van 2 of 3 tekens zijn, of een geregistreerde subtag van maximaal 8 tekens. Als een taal zowel een taalcode van 2 als 3 tekens heeft, gebruik dan de code van 2 tekens. Een volledige lijst met taalcodes is te vinden in het IANA Language Subtag Registry.

Taalcodes zijn niet hoofdlettergevoelig, maar de klasse Locale gebruikt altijd kleine versies van de taalcodes

Een landinstelling maken

Het maken van een java.util.Locale instantie kan op vier verschillende manieren worden gedaan:

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

Java ResourceBundle

U maakt een instantie ResourceBundle als volgt:

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

Overweeg dat ik een eigenschappenbestand i18n.properties :

message=This is locale

Output:

This is locale

Landinstelling instellen

Als u de status met andere talen wilt reproduceren, kunt u de methode setDefault() gebruiken. Het gebruik ervan:

 setDefault(Locale.JAPANESE); //Set Japanese


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow