2013-01-14 13 views
10

Pracuję nad produktem, w którym musimy się trochę martwić o lokalizację. Obecnie jest to przepływ pracy, gdy muszę używać (lub dodać) zlokalizowaną ciąg:Czy istnieje lepszy sposób zarządzania zlokalizowanymi ciągami?

  1. plik Szukaj resources.resx (który ma setki przedmiotów)
  2. W przypadku stwierdzenia, skopiuj nazwę. W przeciwnym wypadku, należy dodać nowy ciąg i skopiuj nazwę
  3. Następnie użyj ResourceFactory.ResourceMgr.GetString("MY_MAGIC_STRING") (gdzie ResourceMgr jest tylko pole statyczne do ResourceManager)

ten proces krok 3 dla strun jest prawdziwy ból. Czy są jakieś wzorce lub sposoby na ułatwienie tego procesu?

+1

Uważaj na ponowne użycie tego samego ciągu znaków, są frazy/zdania/słowa, które muszą być różnie tłumaczone na inne języki, w zależności od kontekstu. Na przykład. koniugacja czasowników w językach słowiańskich w zależności od tematu zdania. – svick

+0

@ Sick oczywiście. Zwykle staramy się trzymać wszystko razem (szczególnie używając ciągów w stylu String.Format) i pozwolić tłumaczom powiedzieć nam, kiedy jest coś, co musimy zmienić – Earlz

+0

Jeśli to jest czysty kod lub sprawić, że będzie wykonywany szybciej? – Paparazzi

Odpowiedz

5

Automatycznie wygenerowane pliki z dostępem do poszczególnych ciągów są znacznie łatwiejsze w użyciu - ustaw "Narzędzie niestandardowe" dla pliku RESX na PublicResXFileCodeGenerator.

kod wyglądałby następująco:

using MyProject.Resources; 
... 
localizedText = Resources.SomeReasonableName; 

notatek strony:

  • mający wiele plików RESX wraz z automatycznie generowanych identyfikatorów mieć dodatkową korzyść intellisense dając wystarczającą liczbę wyborów.
  • w zależności od tego, w jaki sposób obsługiwane jest tłumaczenie, lepiej nie martwić się o powielony tekst w pliku RESX (może z wyjątkiem OK/anuluj rodzaj ciągów znaków). Może być łatwiej radzić sobie z powielonymi ciągami w czasie tłumaczenia.
+0

Ale to tylko sprawi, że krok 3 będzie nieco lepszy, więc nie jest to tak duża poprawa, nie? – svick

+1

@ Sick, twoja rozmowa. "Nieznacznie" jak w "Sprawdzanie czasu kompilacji a sprawdzanie w czasie wykonywania". Również jeśli łańcuchy są zorganizowane w pliki według funkcji, uzyskujesz intellisense z rozsądną liczbą opcji, jeśli wszystko w jednym pliku - nie tak dużo. Ale przynajmniej dostaniesz błędy czasu kompilacji zamiast uruchamiania. –

0

Jest to rozwiązanie Java, które mogą dać ci kilka pomysłów: http://rodionmoiseev.github.com/c10n/

Pomysł jest przechowywanie tłumaczeń w kodzie źródłowym, używając adnotacji na metodach interfejsów. Następnie za pomocą specjalnego narzędzia można dynamicznie tworzyć serwery proxy (klasy dynamicznie implementujące interfejs), które zwrócą zlokalizowaną wartość ciągu podczas wywoływania metody interfejsu.

W ten sposób "MY_MAGIC_STRING" zostaje zastąpione przez wywołanie metody MyMagicString(), która zapewnia pewne bezpieczeństwo pisowni/typu i czyni ją bardziej przyjazną dla refaktoryzacji.

+0

Zamieszczanie odpowiedzi zawierającej tylko link nie jest zbyt użyteczne. Czy możesz dodać krótkie wyjaśnienie, co robi biblioteka? – svick

+0

Wiedziałem, że tak się stanie: S Mam nadzieję, że teraz jest trochę bardziej przejrzyste. – rodion

Powiązane problemy