Rozglądałem się za tworzeniem aplikacji odpowiednich dla wielu języków w C #, ponieważ muszę pracować nad małym projektem, w którym tak jest. Zasadniczo znalazłem na to dwa sposoby:
Ustaw właściwość Localizable formularza na true, ustaw właściwość Language, wypełnij wszystkie etykiety i tym podobne, i gotowe. Główną wadą, jaką w tym widzę, jest: jak tworzyć inne rzeczy, które nie są częścią formularza gotowego dla wielu języków (np. Wyskakujące okienka, pliki dziennika lub okna itp.).
Utwórz plik zasobów, na przykład „Lang.en-us.resx” i po jednym dla każdego języka, na przykład „Lang.nl-nl.resx” i wypełnij go ciągami znaków. Wydaje się, że IDE automatycznie generuje dla mnie klasę, więc w kodzie mogę po prostu użyć Lang.SomeText. Największą wadą, jaką w tym widzę, jest to, że dla każdego formularza muszę samodzielnie ustawić wszystkie etykiety i inne podpisy w kodzie (i nie wydaje się, aby wiązanie danych działało z tymi zasobami).
Jestem jednak pewien, że istnieją również inne metody, aby to zrobić.
Jaka jest więc najlepsza praktyka? Co jest najłatwiejsze dla małych aplikacji (kilka formularzy, połączenie z bazą danych itp.) I jaka skala jest najlepsza dla większych aplikacji?
źródło
Odpowiedzi:
Zawsze korzystałem z plików zasobów dla aplikacji wielojęzycznych.
W sieci jest wiele artykułów wyjaśniających, jak z nich korzystać.
Użyłem dwóch różnych sposobów:
Plik / formularz zasobów jest łatwiejszy do zaimplementowania, wystarczy wprowadzić wartości w pliku zasobów, ale takie podejście jest trudniejsze do utrzymania, ponieważ etykiety są rozproszone w całej aplikacji.
Globalny plik zasobów umożliwia scentralizowanie wszystkich etykiet (obrazów itp.) W jednym pliku (na język), ale oznacza to ręczne ustawienie etykiet w ładowaniu formularza. Ten plik może również służyć do wyświetlania komunikatów o błędach itp.
Kwestia gustu ...
I ostatnia uwaga, piszę programy w języku angielskim i francuskim, używam „en” i „fr”, a nie „en-US” i „fr-FR”. Nie komplikuj rzeczy, różne dylelekty języka angielskiego (amerykański, angielski, australijski itp.) Mają niewiele różnic, aby używać tylko jednego (to samo dotyczy francuskiego).
źródło
Niedawno napisałem program obsługujący język niemiecki i angielski. Byłem zaskoczony, gdy dowiedziałem się, że jeśli po prostu nazwałem swoje zasoby w języku angielskim LanguageResources.resx i moje zasoby niemieckie LanguageResources.de.resx, automatycznie wybrał właściwy język. ResXFileCodeGenerator zajął się tym wszystkim za mnie.
Zwróć uwagę, że pola w dwóch plikach były takie same i wszystkie jeszcze nie wprowadzone pola niemieckie byłyby wyświetlane w aplikacji jako angielskie, ponieważ najbardziej niespecyficznym językiem pliku jest plik domyślny. Szukając łańcucha, przechodzi on od najbardziej szczegółowego (np. De-DE.resx) do najmniej szczegółowego (np. Resx).
Aby uzyskać dostęp do swoich ciągów, użyj wywołań ResourceManager.GetString lub ResourceManager.GetObject. Aplikacja powinna udostępniać narzędzie ResourceManager za darmo.
źródło
Z korzyścią dla innych, którzy mogą się z tym spotkać (ponad rok po ostatnim poście), jestem autorem profesjonalnego produktu lokalizacyjnego, który sprawia, że cały proces tłumaczenia jest niezwykle łatwy. Jest to dodatek do programu Visual Studio, który wyodrębni wszystkie ciągi „.resx” z dowolnego rozwiązania i załaduje je do pojedynczego pliku, który można przetłumaczyć za pomocą bezpłatnej samodzielnej aplikacji (tłumacze mogą pobrać to z mojej witryny). Ten sam dodatek zaimportuje następnie przetłumaczone ciągi z powrotem do rozwiązania. Niezwykle łatwy w użyciu z wieloma wbudowanymi zabezpieczeniami, wieloma dzwonkami i gwizdkami oraz pomocą online (nie będziesz jej dużo potrzebować). Zobacz http://www.hexadigm.com
źródło