ToolTranslate
To jest podręcznik dla narzędzia ToolTranslate. Możesz go przetłumaczyć!
Przeznaczenie
Wiele narzędzi na WMF Labs ma brakujące tłumaczenia interfejsu, inaczej mówiąc, są dostępne tylko w jednym języku, zazwyczaj angielskim. Nawet narzędzia, które obsługują wiele języków interfejsu, wykorzystują prymitywne metody dodawania nowych języków i tłumaczeń. ToolTranslate oferuje scentralizowany i przyjazny użytkownikowi sposób dla Społeczności (TM) na tworzenie tłumaczeń narzędzi. Narzędzia muszą mieć wprowadzoną obsługę tego mechanizmu, inaczej mówiąc, muszą być przebudowane do obsługi dynamicznego zamiast statycznego tekstu interfejsu. Pierwotny wpis na blogu.
Tłumaczenie
- Przejdź do narzędzia
- Autoryzuj narzędzie
- Wybierz narzędzie, które chcesz przetłumaczyć z listy
- Wybierz lub dodaj język, na który chcesz przetłumaczyć
- Dwukrotnie kliknij komórkę, gdzie powinno znajdować się tłumaczenie, lub tłumaczenie, które chcesz ulepszyć
- Wpisz tekst. Możesz używać HTML (bez JavaScript!). Mogą pojawić się sugestie tłumaczeń z innych narzędzi z tej samej nazwy klucza, które możesz wykorzystać jako podstawę dla tekst.
- Kliknij OK. Zrobione! Pamięć podręczna przeglądarki może powodować, że tłumaczenia nie będą wyświetlane w tłumaczonych narzędziach, dopóki ich nie załadujesz ponownie.
Zasoby
- Film demonstracyjny o interfejsie ToolTranslate (użytym na tym samym narzędziu!)
- Proste narzędzie demonstracyjne oraz kod źródłowy HTML/JS
- (edycja dla Wikidanych) jako nieco bardziej ambitny przykład
- repozytorium git
Techniczne
Tłumaczenia są przechowywane w bazie danych w Labs. Starsze wersje tłumaczeń też są przechowywane oraz mają przypisane autorstwo do edytującego. (Dostępne też narzędzie «recent changes».)
Aby uprościć dostęp do danych o tłumaczeniach, wszystkie tłumaczenia są także przechowywane w plikach JSON, które sa aktualizowane po każdej zmianie. Przykład dla "demotool1":
- toolinfo.json, plik JSON z informacjami o narzędziu
- en.json, plik JSON zawierający angielskie tłumaczenia tego narzędzia. Inne języki działają w ten sam sposób, z odpowiednim kodem języka
Jest też plik JSON z wszystkimi poprawnymi językami.
Baza danych
Dane źródłowe są przechowywane w bazie danych s53069__tooltranslate_p
na tools-db w tools labs (mysql --defaults-file=~/replica.my.cnf -h tools-db s53069__tooltranslate_p
). Dane mogą być także stąd pobierane jeżeli trzeba.
Są dostępne także poniższe tabele:
- tool
- id | name | label | url | owner
- translation
- id | tool_id | language | key | json | user | timestamp | current
HowTo: HTML/JS
- Check out the demo code
- The ToolTranslate JS code has a list of options you can use
- If you want a translated string (using example object
tt
),tt.t(key)
ortt.t(key,{lang:language_code})
will get it for you - In HTML, add the
tt
attribute to any tag, e.g.<span tt='key'></span>
. - Translation strings containing "https://bitbucket.org/magnusmanske/tooltranslate/src/d93e2e706a76be21ee02affb0bc1cdece8f087ae/public_html/demos/demotool1.html?at=master&fileviewer=file-view-default" to "$9" will have those automatically substituted by tag attributes "tt1" to "tt9", respectively. This is to allow the change of interface language without splitting texts into many fragments. The translation will not be touched if the attributes are missing. In JavaScript,
tt.t(key,{params:['value for https://bitbucket.org/magnusmanske/tooltranslate/src/d93e2e706a76be21ee02affb0bc1cdece8f087ae/public_html/demos/demotool1.html?at=master&fileviewer=file-view-default','value for https://bitbucket.org/magnusmanske/tooltranslate/src/d93e2e706a76be21ee02affb0bc1cdece8f087ae/public_html/tt.js?at=master&fileviewer=file-view-default']})
.
HowTo: PHP
Jest klasa PHP, która możesz dołączyć na Labs, w taki sposób:
require_once ( "/data/project/tooltranslate/public_html/tt.php") ;
Możesz następnie utworzyć instancję tej klasy:
$tt = new ToolTranslation ( array ( 'tool' => 'your_tool_key' , 'language' => 'de' , 'fallback' => 'en' , 'highlight_missing' => true ) ) ; // Wszystko oprócz 'tool' jest nieobowiązkowe
Bezpośrednie użycie
Są dwa sposoby pobierania tłumaczeń interfejsu w PHP. Pierwszy to bezpośrednie pobranie przetłumaczonego ciągu
print "<p>" . $tt->t('translation_key') . "</p>" ;
Wadą jest to, że tłumaczenie nie może być zmienione bez przeładowania strony.
Use via JS
You can instead add HTML "translation tags" (see above), and have the class add the necessary JS invocation. Another advantage is that the PHP class does not need to load any translation files if you never use the "direct" translation above. To use HTML/JS translation, the <head> section of your pages' HTML needs to contain
<script src="https://tools-static.wmflabs.org/tooltranslate/tt.js">
(You will also need jQuery.) When generating the page, instead of the above, write:
print "<p tt='translation_key'></p>" ;
Somewhere in the output (maybe towards the end), you will need to add the invocation code:
print $tt->getJS() ;
This will initialize the required JS, reproducing the parameters used in the PHP instance (fallback language etc.). If you want a "translation dropdown", add a wrapper element in your HTML code
<div id='tooltranslate_wrapper'></div>
then give the jQuery accessor as a parameter to the getJS method call:
print $tt->getJS('#tooltranslate_wrapper') ;
Zobacz to narzędzie będące działającym przykłądem.