Jak dobrze zbudować aplikację o wielu wersjach językowych?

Chciałbym napisać aplikację w C#, która będzie miała opcję w menu dotyczącą wyboru języka (na początek polski i angielski). Wybór konkretnego języka skutkować będzie zmianą interfejsu (głównie menu, labelów, i message boxów). Jak się do tego porządnie zabrać, żeby kod był ładnie i sprawnie napisany?

  • .NET ma wbudowane mechanizmy do tego - a mianowicie pliki zasobów. Jeżeli chodzi o język formularzy, to:

    • ustaw w formularzu właściwość Localizable na True
    • ustaw wszystkie teksty tak, aby były w języku jaki uważasz za podstawowy
    • zmień wartość atrybutu Language na kolejny język
    • wprowadź nowe wartości tekstów w formularzu
    • powtarzaj dla wszystkich języków jakie potrzebujesz.

    Spowoduje to dodanie do formularza kolejnych plików z zasobami w różnych językach.

    Co do tekstów "luźnych" tzn. wyświetlanych w okienkach dialogowych, komunikatach itd., to możesz sobie dodać do projektu plik zasobów (typ pliku Resources) i wprowadzić do niego teksty w jednym języku, potem dodać plik o takiej samej nazwie, ale z przyrostkiem będącym symbolem języka, np. pl_PL.resx i w nim wprowadzić teksty w kolejnym języku... Symbole języków możesz sobie podpatrzeć w dokumentacji, albo podejrzeć jak środowisko nazywa automatycznie tworzone pliki zasobów związane z pierwszą częścią tej odpowiedzi (rozwiń plusik przy obiekcie formularza w Solution Explorerze).

    Potem łatwo możesz przełączać się między językami za pomocą właściwości

    Thread.CurrentCulture
    

    oraz

    Thread.CurrentUICulture
    

    ustawianych dla wątku, w którym działa interfejs użytkownika. Pierwsza z nich odpowiada za lokalizację rzeczy typu formatowanie daty czy liczb, druga - za wybieranie odpowiedniego pliku zasobów do wyświetlania tekstów.

  • Zanim rozpoczniesz wymyślanie koła na nowo, zapoznaj się z najbardziej rozpowszechnioną technologią w tej materii, czyli GNU gettext. Myślę, że może rozwiązać twoje problemy, a do tego istnieją sprawdzone techniki narzędzia do dokonywania tłumaczeń. Tłumacze ze środowiska open source znają to narzędzie bardzo dobrze. Myślę, że rządzi... :-)

    A, żeby nie było, że walę ściemę: Using GNU Gettext for i18n in C# and ASP.NET.

  • Swego czasu napisałem aplikację do wysyłania mejli Small Email Sender, która jest dostępna w 32 językach świata. W trakcie tego projektu zdobyłem trochę praktycznego doświadczenia w pisaniu aplikacji wielojęzycznych.

    Na początku spróbowałem z wbudowanym mechanizmem w IDE Visual Studio i .NET. Chodzi o właściwość Localizable i Language. Kiedy ustawisz Localizable na true możesz wpisywać teksty dla poszczególnych języków. Wybierasz z Language język po czym wpisujesz teksty dla tego języka itd. W wyniku tego dla każdego języka formatka dostaje oddzielny plik np. Form1.pl-PL.resx dla języka polskiego.

    Rozwiązanie to jest wygodne dla bardzo małych projektów, takich które mają 1-2 formatki i 1-2 języki które samemu wprowadzasz. Dlatego jeżeli chcesz tylko angielski może to być rozwiązanie dobre dla Ciebie.

    Tutaj masz video tutorial pokazujący od A do Z jak tworzyć aplikację wielojęzyczną w C#. NA filmie łatwiej to pokazać niż opisywać poszczególne kroki w IDE w tekście:

    http://polishwords.com.pl/blog/2010/tworzenie-aplikacji-wielojezycznych-w-c/

  • Dobrze by było przygotować pliki językowe w XML, a potem po prostu ładować z odpowiedniego miejsca :-)



    coś jak:

    <language>
        <file> Plik </file>
    </language>
    

    a dla angielskiego:

    <language>
        <file> File </file>
    </language>
    

Zaloguj się, aby dodać swoją odpowiedź