15

Mam projekt w Xamarin, który jest przeznaczony dla telefonów z systemem Android, iOS i Windows. Użyłem rdzenia (biblioteki PCL), aby udostępnić wspólny kod między różnymi platformami. I dodaje zasób plików (.net) .Resx zasobów w moim bazowej biblioteki i czytać konkretny ciąg kulturę i używany następujący fragment kodu w jednym z moich ViewModel:Lokalizacja dla mobilnej platformy międzyplatformowej za pomocą xamarin i wydanie tylko iOS.

public string GetString() 
{ 
    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 

„LoginLabel” jest moim kluczowym zasobem, a jego wartość to "Zaloguj się" (po angielsku) i "inloggen" w języku holenderskim.

Utworzono dwa pliki zasobów CommonResources dla języka angielskiego i holenderskiego w moim projekcie PCL. CommonResources.resx
CommonResources.nl-NL.resx

w Androidzie, iOS i Windows Phone, ustawić kulturę następująco:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

Działa to dobrze dla Android i Windows Phone.

Ale dla iOS to nie działa. Zawsze zwraca ciąg zasobów z pliku w języku angielskim. Kultura jest prawidłowo ustawiona i wyświetlana w trybie debugowania. ale jakoś nie jest w stanie załadować łańcucha zasobów z natywnego zasobu.

Pytanie brzmi, czy możliwe jest zlokalizowanie ciągu (.Net way) przy użyciu PCL dla wszystkich platform? ktoś ma jakiś pomysł? Z góry dzięki.

+0

Czy język holenderski jest jedynym innym językiem? Jeśli nie, to czy inne języki działają zgodnie z oczekiwaniami? Jeśli tak, czy możesz dodać inny język jako test? – chad

+0

Nie, hindi to inny język poza holenderskim. Nie działa dla żadnego obsługiwanego języka, z wyjątkiem angielskiego. – SoftSan

Odpowiedz

2

Do lokalizacji w naszych projektach Xamarin użyłem Multilingual App Toolkit (detailed here) z szablonów Microsoft i T4, aby przekształcić dane wyjściowe z zestawu narzędzi do formatów użytecznych dla Androida i iOS.

This samouczek ma fantastyczny przegląd procesu i jest oparty na projekcie kodu this.

0

Albo:

  • Nie jesteś rzeczywiście ustawienie CurrentCulture na iOS.
  • Ustawiasz CurrentCulture na wątku A i odzyskujesz go na wątku B.

Spróbuj tego:

public string GetString() 
{ 
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 
0

Czy go przetestować na rzeczywistym urządzeniu? W symulatorze nie można zmienić kultury. Miałem podobny problem z moimi plikami językowymi.