Sök…


Anmärkningar

Java kommer med en kraftfull och flexibel mekanism för att lokalisera dina applikationer, men det är också lätt att missbruka och avveckla ett program som bortser från eller misslyckar användarens landskap, och därför hur de förväntar sig att ditt program ska bete sig.

Dina användare kommer att förvänta sig att se data lokaliserade till de format de är vana med, och att försöka stödja detta manuellt är ett dåligt ärende. Här är bara ett litet exempel på olika sätt som användare förväntar sig att se innehåll som du kan anta att "alltid" visas på ett visst sätt:

datum Tal Lokal valuta Utländsk valuta Avstånden
Brasilien
Kina
egypten
mexico 20/3/16 1.234,56 $ 1,000.50 1 000,50 USD
Storbritannien 20/3/16 1,234.56 £ 1,000.50 100 km
USA 3/20/16 1,234.56 $ 1,000.50 1 000,50 MXN 60 mil

Allmänna resurser

Java-resurser

Formaterade datum automatiskt med "språk"

SimpleDateFormatter är bra i en nypa, men som namnet antyder att den inte skalas bra.

Om du hårdkodar "MM/dd/yyyy" över hela din applikation kommer dina internationella användare inte att vara nöjda.

Låt Java göra jobbet åt dig

Använd de static metoderna i DateFormat att hämta rätt formatering för din användare. För en stationär applikation (där du litar på standardinställningen ), ring bara:

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

Där style är en av formateringskonstanterna ( FULL , LONG , MEDIUM , SHORT , etc.) som anges i DateFormat .

För en applikation på serversidan där användaren anger sitt land som en del av begäran ska du skicka det uttryckligen till getDateInstance() istället:

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

Strängjämförelse

Jämför två strängar som ignorerar fallet:

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

Använd inte

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

Språk har olika regler för konvertering av versaler och versaler. Ett "jag" skulle konverteras till "i" på engelska. Men på turkiska blir ett 'jag' ett 'ı'. Om du måste använda toLowerCase() använder du överbelastningen som förväntar sig ett Locale : String.toLowerCase(Locale) .

Jämförelse av två strängar som ignorerar mindre skillnader:

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

Sortera strängar som respekterar naturligt språkordning, ignorerar fall (använd samlingsnyckel för:

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

java.util.Locale används för att representera en "geografisk, politisk eller kulturell" region för att lokalisera en given text, nummer, datum eller operation till. Ett språkobjekt kan sålunda innehålla ett land, en region, ett språk och även en variant av ett språk, till exempel en dialekt som talas i en viss region i ett land, eller som talas i ett annat land än det land som språket kommer från.

Locale-instansen överlämnas till komponenter som behöver lokalisera sina handlingar, oavsett om det konverterar ingången, utgången eller bara behöver den för interna operationer. Locale-klassen kan inte göra någon internationalisering eller lokalisering av sig själv

Språk

Språket måste vara en ISO 639 2 eller 3 tecken språkkod, eller en registrerad språkundtagg på upp till 8 tecken. Om ett språk har både en 2 och 3 tecken språkkod, använd 2 teckenkoden. En fullständig lista över språkkoder finns i IANA Language Subtag Registry.

Språkkoder är okänsliga för versaler, men klassen Locale använder alltid småversioner av språkkoderna

Skapa en språk

Skapa en java.util.Locale instans kan göras på fyra olika sätt:

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

Java ResourceBundle

Du skapar en ResourceBundle-instans på så sätt:

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

Tänk på att jag har en egendomsfil i18n.properties :

message=This is locale

Produktion:

This is locale

Ställer in språk

Om du vill reproducera tillståndet med andra språk kan du använda setDefault() . Dess användning:

 setDefault(Locale.JAPANESE); //Set Japanese


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow