2012-03-20 13 views
6

W celu uzyskania rozszerzonego języka PHP content management system konieczne są tłumaczenia językowe. Badałem podejścia programistyczne do systemu tłumaczeń i uważałem, że dobrym przykładem jest Qt Linguist.Tłumaczenie na języki z nieregularnymi regułami

To Wykorzystanie przykład z dokumentacji Qt:

int n = messages.count(); 
showMessage(tr("%n message(s) saved", "", n)); 

Qt wykorzystuje znane zasady językowe w celu ustalenia, czy „message” posiada „s” dołączany w języku angielskim.

Kiedy przywiozłem ten przykład z mojego zespołu rozwoju, odkrył, że problem, który zagraża skuteczności rozciągliwości modelowania off z tr() funkcji Qt.

To jest podobny przykład, z tym że coś jest teraz poważnie źle.

int n = deadBacteria.count(); 
showMessage(tr("%n bacterium(s) killed", "", n)); 

mnoga od "bacterium" jest "bacteria". Niewłaściwe jest dołączanie "s".

Nie mam dużego doświadczenia z Qt Linguist, ale nie widziałem jak radzi sobie z nieregularnymi koniugacjami i formami.

Bardziej skomplikowaną frazą może być "%n cactus(s) have grown.". Liczba mnoga powinna być "cactii", a "have" musi być sprzężona z "has", jeśli jest jeden kaktus.

Możesz myśleć, że logiczną poprawką jest unikanie tych nieregularnych słów, ponieważ nie są one używane w programowaniu. Cóż, to nie jest pomocne w dwojaki sposób:

  1. Być może nie jest językiem, który modyfikuje rzeczowników w sposób nieregularny, choć ciąg źródłowy działa w języku angielskim, jak "%n message(s) saved". W MyImaginaryLanguage, właściwy sposób tworzą ciąg może być tłumaczone „1Message zapisane”, „M2essage zapisane”, „Me3ssage zapisane” dla %n wartości 1, 2 i 3, odpowiednio, i nie Wygląda na to, że Qt Linguist ma zasady, aby sobie z tym poradzić.
  2. Aby rozbudować system zarządzania treścią, tak jak ja, muszę się upewnić, że wszystkie typy aplikacji internetowych muszą być uwzględnione. Ktoś może zbudować role-playing game, który wymaga skonstruowania zdań w stylu "5 kaktusów urosło." "A może oprogramowanie zabezpieczające chce powiedzieć: „ClamAV znaleziono 2 wirusy.” w przeciwieństwie do „ClamAV Znaleźliśmy 2 wirusa (y).

Po poszukiwaniach online, aby sprawdzić, czy inni programiści Qt posiada rozwiązanie tego problem i nie znalazłem żadnego, przybyłem do Stack Overflow.

chcę wiedzieć:

  1. Co rozszerzalny i skuteczne techniki programowania powinien być używany do przetłumaczenia ciągi z możliwych nieprawidłowych zasad?
  2. Co robią programiści i tłumacze Qt, jeśli napotkają problem z nieprawidłowościami?
+0

Nie wiem nic o Qt wiem, ale być może można zakodować rozszerzenie który analizuje pojedynczej/dual/mnogiej zakończeń? 'bacteri (a/um)', '(1Message/M2essage/Me3ssage)' byłoby przykładem, który wymagałby nieco więcej pracy i byłby mniej dynamiczny. – Cyclone

Odpowiedz

6

Źle zrozumiałeś, jak działa pluralizacja w Qt: nie jest to automatyczne tłumaczenie.

Zasadniczo masz domyślny ciąg znaków np. "% n kaktusów (y) urosły." który jest dosłowny w twoim kodzie. Możesz umieścić w nim wszystko, co do cholery chcesz, np. "dingbat wibble foo% n bar".

Następnie możesz zdefiniować języki tłumaczenia (w tym jeden dla tego samego języka, w którym napisałeś ciąg źródłowy).

Lingwista jest zaprogramowany na różne zasady dotyczące sposobu traktowania różnych języków przez języki. Po angielsku jest to liczba pojedyncza lub mnoga; ale jeśli język ma konkretną formę na zero lub cokolwiek innego, przedstawia te w języku Linguist. Następnie pozwala umieścić w dowolnym, prawidłowym zdaniu, w docelowym języku tłumaczenia, i obsługuje umieszczenie %n w miejscu, w którym zdecydujesz, że powinno być w przetłumaczonym formularzu.

Tak więc każdy, kto wykonuje tłumaczenie w językoznawstwie, dostarczyłby źródła i musiałby na przykład wypełnić liczbę pojedynczą i mnogą. tekst

Źródło: %n cactus(s) have grown.

angielskie (liczba pojedyncza): %n cactus has grown.

angielskie (liczba mnoga): %n cacti have grown.

Jeśli aplikacja nie może odnaleźć zainstalowaną tłumaczenie to wraca do źródła literalnego. Również literał źródłowy jest tym, co osoba tłumacząca widzi, więc musi wywnioskować, co masz na myśli. Stąd "dingbat wibble foo% n bar" może nie być dobrym pomysłem przy opisywaniu, jak wiele kaktusów urosło.

Dalsze czytanie:

+0

Ah, to wyjaśnia pozorną magię. Będę musiał kiedyś wypróbować Qt Linguist. – Deltik

3

Najlepszym wyborem jest użycie szkieletu i18n GNU gettext. To jest ładnie integrated into PHP, i daje narzędzia do precyzyjnie define wszystkie dziwaczne zasady gramatyczne o liczbie mnogiej.

1

Za pomocą Qt Linguist można obsługiwać różne liczby gramatyczne w oparciu o język docelowy. Dlatego za każdym razem, gdy zostanie wykryty %n w ciągu znaków tr, tłumacz zostanie poproszony o podanie wszystkich niezbędnych tłumaczeń dla języka docelowego.Przeczytaj ten artykuł, więcej szczegółów:

http://doc.qt.nokia.com/qq/qq19-plurals.html