Najlepsza praktyka tworzenia aplikacji wielojęzycznej w C # / WinForms? [Zamknięte]

94

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?

Mihai Limbășan
źródło
3
Zauważyłem, że nie konstruktywne (lub inne pytania typu "nieważne dla SO") są jednymi z najbardziej wartościowych pytań :) To też jest dobre pytanie (myślę, że głosy to potwierdzają) Oto dobra demonstracja jak używać wielojęzycznego dodatku do obsługi wielu języków youtube.com/watch?v=SNIyP1QQdVs
Prokurors
1
Tak trudno jest czasem poskładać wszystkie fragmenty wiedzy w internecie i uważam to pytanie za bezcenne w tej chwili. Z pewnością są chwile, kiedy zamykanie miękkich pytań jest mniej konstruktywne niż pozostawienie ich otwartych i myślę, że to jeden z takich momentów. :)

Odpowiedzi:

20

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 zasobów na formularz
  • Globalny plik zasobó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).

ThatBloke
źródło
2
Czasami trzeba się martwić o dialekty. Na przykład chińskie znaki są zupełnie inne w języku chińskim tradycyjnym (Tajwan) i chińskim uproszczonym (Chiny kontynentalne).
MarkJ
1
Dokumentacja @MarkJ MSDN wspomina, że ​​chiński tradycyjny i chiński uproszczony nie są dialektami (kraj / region), ale kulturami neutralnymi. Msdn: „Kultura neutralna to kultura powiązana z językiem, ale nie z krajem / regionem. Określona kultura to kultura powiązana z językiem i krajem / regionem. Na przykład„ fr ”to neutralna kultura i „fr-FR” to specyficzna kultura. Należy pamiętać, że „zh-CHS” (chiński uproszczony) i „zh-CHT” (chiński tradycyjny) to kultury neutralne ”.
szerokopasmowy
Niedawno zrobiłem to za pomocą linku , 2 kroki nie wymienione tam: 1. Kliknij wszystkie pliki .resource i ustaw właściwość „Build Action” na „Content”. 2. Kliknij wszystkie pliki .resource i ustaw właściwość „Kopiuj do katalogu wyjściowego” na „Zawsze kopiuj”.
Sourav
1
@Kiquenet Pełną odpowiedź (z kodem), w tym obsługę całej platformy .NET, można znaleźć na stronie: stackoverflow.com/a/35813707/2901207
CularBytes
9

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.

Rick Minerich
źródło
6

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

Larry
źródło
1
Powinno to zostać dodane jako natywna funkcja do visualstudio! Świetne oprogramowanie!
Caverna
Bardzo dziękuję (doceniam). Zgodziłbym się z Tobą przed uruchomieniem produktu (około 10 lat temu), ale gdyby MSFT wdrożył go dzisiaj, wypadłby mi z biznesu :)
Larry