2017-10-22 72 views
9

Jak wiecie ICU obsługuje następujące kalendarzy:Jak uzyskać typ kalendarza według locale ciąg

Japanese 
Buddhist 
Chinese 
Persian 
Indian 
Islamic 
Hebrew 
Indian 
Coptic 
Ethiopic 

Jednak IntlDateFormatter tylko konwersji formatu gregoriański z datą do lokalizacji i nie konwertuje do kalendarza automatycznie, jednak można wysłać do niego kalendarz i to wystarczy. Problem polega na tym, że muszę ręcznie wymyślić system kalendarza dla każdego locale.

Jak uzyskać typ kalendarza z ciągu ustawień narodowych. na przykład wysyłanie fa_IR Potrzebuję uzyskać "perski", więc wyślij go do IntleDateFormatter, aby wygenerować ciąg danych dla tego locale.

+0

Może to rozważyć. Zobacz: https://stackoverflow.com/a/44395179/1219741 – jaswrks

Odpowiedz

3

W skrócie; nie możesz. Czemu?

Przyjrzyjmy się, czym są oba obiekty: IntlDateFormatter jest częścią rozszerzenia internacjonalizacji stworzonego do wykonywania różnych operacji związanych z locale. Wśród tych operacji są formaty Data i kalendarz obsługujący ustawienia regionalne.

Locale class to identyfikator używany do uzyskania zachowania językowego, kulturowego lub specyficznego dla regionu.

Mimo że są częścią tego samego przedłużenia, są one ortogonalne, jak opisano here. Oznacza to, że nie można ustalić jednego z drugiego. Oświadczenie to zostało dodatkowo udowodnione w podręczniku użytkownika dostarczonym przez projekt ICU.

... Obecnie wszystkie lokalizacje domyślne do kalendarza gregoriańskiego, z wyjątkiem zgodności locales th_TH_TRADITIONAL i ja_JP_TRADITIONAL. Jeśli podane zostanie słowo kluczowe "calendar", ta wartość zastąpi wartość domyślną dla tego ustawienia narodowego.

Source: User guide ICU project

Jak stwierdza cytując jakieś domyślnego ustawienia kalendarza gregoriańskiego chyba świadczona jest „kalendarz” słowo kluczowe. Nie mogą wyprowadzić kalendarza z podanego locale automatycznie.

Rozwiązanie twojego problemu najprawdopodobniej znajduje się w budowaniu otoki. Istnieje kilka pakietów w Internecie, które pomogą ci w tym, ale nie jest to w pobliżu czego dokładnie chcesz. Jeśli chcesz zapisać datę, zapisz ją jako sygnaturę czasową i pokaż ją w formacie wybranym przez użytkownika, przy czym ta ostatnia jest, jeśli masz swobodę implementacji niektórych ustawień konta lub podobnego.

Jednym z modułów, w którym znalazłem inspirację w moich poszukiwaniach odpowiedzi, jest GlobalizeJS. Jest otwarty open issue, który maluje interesujący obraz tego, jak trudno jest uzyskać prawo. Weźmy na przykład Zjednoczone Emiraty Arabskie (AE), mają pięć preferencji kalendarzowych; Gregoriański, islamski Um al-Qura, islamski, islamski cywilny i islamski. Pozwoliłbym użytkownikowi określić, który kalendarz im odpowiada, aby był dla nich najbardziej użyteczny.

Powodzenia!