Проблема с форматом даты с локализацией по странам

#java #localization #date-format

#java #локализация #формат даты

Вопрос:

Я пишу многоязычную программу, и я установил для своих локализаций привязанные к конкретной стране (например, de_AT, de_DE, en_US, en_GB). Итак, если я вызываю DateFormat.getDateInstance(int fomat,Locale l) , я всегда получаю английский! Это работает, если я использую только языковые локали (например, En, de, …)

Я просмотрел документ Oracle DateFormat, но также с их примерами возникает ошибка.

Вот пример программы:

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

public class DateFormatTest {
  public static void main(String args[]){
    Locale[] locales={new Locale("de_AT"),new Locale("de_DE"), new Locale("de"), new Locale("en_US"), new Locale("en"), new Locale("fr_FR"), new Locale("fr_CA"), new Locale("fr")};
    Date today= new Date();
    for(Locale l: locales){
        System.out.println(l.toString() "t" 
              DateFormat.getDateInstance(DateFormat.DEFAULT,l).format(today) "t" 
              DateFormat.getDateInstance(DateFormat.FULL,l).format(today));
    }
  }
}
  

Это результат:

 huwa@hubefl-ws:~/tmp$ javac DateFormatTest.java 
huwa@hubefl-ws:~/tmp$ java DateFormatTest 
de_at   Nov 8, 2011 Tuesday, November 8, 2011
de_de   Nov 8, 2011 Tuesday, November 8, 2011
de      08.11.2011  Dienstag, 8. November 2011
en_us   Nov 8, 2011 Tuesday, November 8, 2011
en      Nov 8, 2011 Tuesday, November 8, 2011
fr_fr   Nov 8, 2011 Tuesday, November 8, 2011
fr_ca   Nov 8, 2011 Tuesday, November 8, 2011
fr      8 nov. 2011 mardi 8 novembre 2011
  

У кого-нибудь такая же проблема? Есть ли решение?

Комментарии:

1. к вашему сведению, я пробовал это в Linux (ubuntu 10.04), используя java: java версии «1.6.0_27» Java (TM) SE Runtime Environment (сборка 1.6.0_27-b07) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 20.2-b06, смешанный режим)

Ответ №1:

Согласно javadocs, конструкторы являются

 Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
  

поэтому, когда вы создаете new Locale("de_AT") , он пытается использовать язык «de_AT», который не существует, поэтому он возвращается к значению по умолчанию (английский).

Попробуйте

 Locale[] locales={new Locale("de", "AT"), new Locale("de", "DE"), ...};
  

Ответ №2:

Проблема в том, как вы создаете Locale объекты. Передайте страну и язык в качестве отдельных аргументов, например

 Locale[] locales = { new Locale("de", "AT"), new Locale("de", "DE"), 
    new Locale("de"), new Locale("en", "US"), new Locale("en"), 
    new Locale("fr", "FR"), new Locale("fr", "CA"), new Locale("fr")};
  

Ответ №3:

Попробуйте

 DateFormat.getDateInstance(DateFormat.FULL,Locale.GERMANY).format(today));