2011-01-17 9 views
7

Szukam sposobu, aby dodać więcej ustawień regionalnych do ustawień regionalnych dostępnych w języku Java 1.6. Jednak ustawienia lokalne, które chcę utworzyć, nie mają kodów krajów ISO-3166 ani kodów języka ISO-639. Czy istnieje sposób, aby to zrobić? Lokalizacje chcę dodać różnią się tylko nazwami językowych, ale mniejsza grupa etniczna, tym bardziej wybredni dostać o ich tożsamości ;-)Jak przedłużyć listę dostępnych lokalizacji Java?

Pomyślałem więc o rozszerzenie istniejącej lokalizacji, coś jak

UserDefinedLocale extends Locale { 
    UserDefinedLocale (Locale parentLocale) {...} 
} 

ale java.util.Locale jest ostateczna, co czyni go szczególnie trudne do włamywanie coś wokół ...

Tak, jest pomysł, że lista Java Locales jest wyczerpująca? Czy pierwszy raz tęsknię za Locales?

Odpowiedz

1

Zobacz this answer:

... Można podłączyć wsparcie dla dodatkowych lokalizacjach poprzez SPI (opisany here). Na przykład, aby udostępnić narzędzie do formatowania daty dla nowego ustawienia narodowego, można to zrobić, realizując usługę DateFormatProvider. Możesz to zrobić, dekorując istniejącą implementację - zajrzę do biblioteki ICU4J, aby sprawdzić, czy zapewnia ona odpowiednie wsparcie.

+0

Dzięki. Niestety obsługa wszystkich użytkowników JRE nie jest opcją dla mojej aplikacji: "Ponieważ interfejsy SPI Locale Sensitive Services są oparte na standardowym mechanizmie Java Extension, można je spakować jako plik JAR (z kilkoma sztuczkami w pliku MANIFEST, który może znajdziesz tutaj) i umieść go w katalogu rozszerzeń. " – alfonx

4

Przeczytaj javadoc dla java.util Locale.

Mówi: „Utwórz Locale obiekt przy konstruktorów w tej klasie:”

mówi również: „Ponieważ Locale obiekt jest tylko identyfikator regionu, nie kontrola poprawności jest wykonywane po Utwórz lokalizację "

Mówi także: " Ustawienia regionalne to mechanizm do identyfikowania rodzaju obiektu (NumberFormat), który chciałbyś uzyskać. Ustawienia regionalne to tylko mechanizm do identyfikowania obiektów, a nie kontener dla same obiekty "

I wreszcie, javadoc dla getAvailableLocales() metoda mówi: „Zwrócona tablica reprezentuje unię lokalizacjach obsługiwanego przez środowisko uruchomieniowe Java oraz zainstalowanych LocaleServiceProvider wdrożeń”

Więc po prostu trzeba wymyślić kod języka, który nie znajduje się na standardowej liście i używa go jako identyfikatora dla ustawień regionalnych.

+0

_ "Musisz więc wymyślić kod języka, który nie znajduje się na standardowej liście, i użyć go jako identyfikatora dla twojego locale." _ - czy tęskniłeś za fragmentem cytowanym o instalacji 'LocaleServiceProvider'? –

+0

Zgadzam się, że to skrót. Ale ponieważ PO nie wyjaśnił jednoznacznie, co miał na myśli, "rozszerzając listę dostępnych lokalizacji", podejrzewałem, że to, czego chciał, właśnie potrzebowało go do utworzenia nowego. Korzystanie z ResourceBundle nie wymaga niczego innego niż nowe ustawienia regionalne. Formatowanie liczb i dat może ponownie użyć reguł z innego języka. Musiałby wtedy użyć tylko nowego kodu kraju lub wariantu kodu. –

Powiązane problemy