2011-12-09 13 views
7

Byłem badania o XLIFF i PO i18n formatów plików i wydaje się, że są powszechnie stosowane i obsługiwane. Istnieje wiele bezpłatnych narzędzi do zarządzania tłumaczeniami w plikach xliff/po.Jak korzystać XLIFF lub PO l10n formatów plików w .NET (C#/ASP.NET) rozwoju

Jednak dotychczas nie mogłem znaleźć dobrego rozwiązania, jak korzystać z plików xliff lub po w projektach .net (C#/ASP.Net). Spodziewam się jakiegoś konwertera xliff/po => resx, ale jak dotąd jeszcze go nie znalazłem.

Jednak w tym samym czasie wiele narzędzi czy wspierają przemianę xliff/PO plików w formacie Java .Properties.

Jeśli masz doświadczenie w implementacji l10n za pomocą plików xliff lub po w projektach .Net - proszę o poradę i podziel się z nami sprawdzonymi metodami działania.

PS: Wolałbym używać formatu Xliff, ponieważ uważam go za bardziej przejrzysty i lepszy w użyciu, ale opcja jest także opcją.

+0

Każdy powód, dla którego nie można bezpośrednio korzystać z plików zasobów? – Oded

+2

Chcemy użyć jednego formatu dla tłumaczeń pomiędzy różnymi projektami, które buduje nasza firma - są to projekty C# i Java, i dzielić się nimi, aby zminimalizować duplikację i dodatkowe koszty dla oddzielnych tłumaczeń dla różnych projektów. – Paul

Odpowiedz

6

PO i pliki XLIFF zwykle działają inaczej: Pliki

  • PO są pliki zasobów, które się spełniły w formacie binarnym, a następnie uzyskać za pomocą gettext() biblioteki. Czasami PO jest używany jako format wyodrębniania, taki jak XLIFF, ale nie jest to jego pierwotny cel.

  • XLIFF to pliki wyodrębniające, które powstają poprzez wyodrębnienie pliku zasobów (np. Resx) do formatu XLIFF, a następnie scalenie z powrotem do oryginalnego formatu.

więc dla XLIFF należy się szuka narzędzia robi resx -> xliff -> resx zamiast xlif -> resx.

Narzędzia wyodrębniające/scalające pliki XLIFF są zwykle nazywane filtrami. Istnieje sporo komercyjnych narzędzi tłumaczeniowych, które akceptują XLIFF, a niektóre mogą również tworzyć XLIFF (Swordfish, Trados Studio itp.).

Istnieje również kilka narzędzi open-source, które mogą wyodrębniać/scalać XLIFF: File2XLIFF4j na przykład (ale nie sądzę, że obsługuje resx).

Rainbow, z projektu Okapi, obsługuje resx. "Stara" wersja .net (Rainbow 5: Okapi na SourceForge) ma filtr dedykowany do pliku resx i może sobie z nim radzić bardzo dobrze; nawet z danymi binarnymi. Może to jednak powodować problemy z kontrolkami stron trzecich (szczegóły: patrz http://okapi.sourceforge.net/Release/Filters/Help/netres.htm).

Nowa wersja java (Rainbow 6: http://code.google.com/p/okapi/) obsługuje resx poprzez swój filtr XML i działa dobrze z prostym resx, ale jeśli masz w sobie dane binarne, tekst w tych wpisach nie zostanie wyodrębniony.

-ys

+0

Świetna odpowiedź! Dziękuję za wyjaśnienie mi tego. Pogłębię się dalej, aby znaleźć najlepsze podejście, aby zminimalizować nakłady na 10.10 za połączenie projektów .net i java. – Paul

4

Użyłem PO do zarządzania projektem .Net po.pliki Resx zaczęły wymykać się spod kontroli. Użyłem go "jako formatu wyodrębniania, takiego jak XLIFF" (patrz Yves comment). Nasze istniejące pliki .resx zostały wyeksportowane/scalone raz w jeden plik .po na język, który stał się naszym autorytatywnym plikiem językowym, z którego wszystkie pliki resx byłyby automatycznie generowane.

Projekty, którymi się zajmuję nie są ASP, więc nie wiem o pakiecie wspomnianym przez mcw0933, ale implementacja Mono w resgen.exe ma pewną prostą po < => zdolność konwersji resx. Jednakże, aby zachować istniejące komentarze i automatycznie dodać oryginalny tekst jako dodatkowe komentarze, rozszerzyłem narzędzie do konwersji mono do punktu, w którym ten, którego używam, jest w zasadzie przepisywany.

I put the extended .po <=> .resx converter on github.

Jeśli chodzi o wybór .po do zarządzania tłumaczeniami projektu C#, to .po jest proste i przyjazne, ale są pewne niedogodności związane z używaniem go w sposób, który nieznacznie różni się od jego pierwotnego użycia w gettext, a ja nie Mają doświadczenie, aby powiedzieć, czy był to lepszy wybór niż Xliff, ale możliwość zarządzania tłumaczeniami i automatyzacji zadań był znacznie lepszy niż radzenie sobie z plikami resx, jak to było w przeszłości.

Drobne niedogodności z użyciem PO trochę inaczej do jego intencji:

  • Ponieważ gettext używa msgstr podwoić jako pole do przechowywania oryginalnego nieprzetłumaczonej smyczkowy, musiałem zrobić resgenEx archiwizowania oryginalnego tłumaczenia ciąg do dołączony komentarz zamiast pola zaprojektowanego do tego celu.
  • Niektóre narzędzia zakładają, że msgid będzie zawierać oryginalne tłumaczenie angielskie (zamiast tylko ciąg ID), co może oznaczać, że opcja automatycznego sprawdzania błędów tego narzędzia nie jest zbyt użyteczna, lub może oznaczać coś, co powoduje, że wybierasz inne narzędzie itp. Większość narzędzi nie przyjmuje jednak założenia.
  • Niektóre narzędzia .po jak \ n zamiast \ r \ n

Projekt pierwotnie napisał resgenEx dla mieli dwóch .resx plików i jeden plik .isl dla każdego obsługiwanego języka, ale wkrótce będę potrzebował zarządzać wszystkimi tłumaczeniami dla projektu .Net, który ma wiele plików resx dla każdej klasy w kodzie. Kiedy tak się stanie, zdecyduję, czy powinienem dalej używać .po, czy powinienem użyć xliffa lub czegoś innego. Jeśli nadal używam .po, to posprzątam resgenEx i prawdopodobnie będę musiał dodać więcej funkcji, takich jak możliwość automatycznego dodawania prefiksów nazw zespołów i klas do msgids.

0

Możesz także wypróbować PhraseApp. PhraseApp to platforma do zarządzania tłumaczeniami i obsługuje szeroki zakres formatów. W ten sposób możesz przesłać go w dowolnym formacie i wyeksportować ponownie w formacie najlepiej dopasowanym do Twojego przypadku, jak XLIFF, po lub resx. W ten sposób nie musisz decydować o jednym formacie tłumaczenia. Zawsze możesz później łatwo przejść do innego formatu. PS: Pełne ujawnienie Pracuję dla zespołu PhraseApp.