ToolTranslate
Detta är en manual för verktyet ToolTranslate. Översätt det gärna!
Syfte
Många verktyg på Toolforge saknar gränssnittsöversättning, dvs, de är bara tillgängliga på ett språk, oftast engelska. Även verktyg som stödjer flera språk i sitt gränssnitt har klumpiga metoder för att lägga till nya språk och översättningar. ToolTranslate erbjuder en centraliserat, användarvänligt sätt för gemenskapen att erbjuda översättningar av verktyg. Verktyg behöver stöd för denna mekanism, dvs, de behöver "omarbetas" en gång för att använda dynamik istället för statisk text i gränssnittet. Ursprungligt blogginlägg.
Översätt
- Gå till verktyget
- Auktorisera verktyget om det krävs
- Välj ett verktyg att översätta från i rullgardinsmenyn längst upp på sidan eller från listan på huvudsidan
- Välj eller lägg till språket du ska översätta till
- Dubbelklicka på "cellen" där din nya översättning ska vara eller översättningen du vill förbättra
- Skriv in din text. Du kan använda HTML (inte JavaScript!). Det kan finnas översättningsförslag från andra verktyg med samma "nyckelnamn", du kan använda dem som grund för din översättning.
- Klicka OK. Klart! Utan cachingstrul från din webbläsare borde din översättning nu synas i respektive verktyg nästa gång du laddar in den.
Resurser
- Demonstrationsvideo av ToolTranslates gränssnitt (på själva verktyget!)
- Enkelt demonstrationsvideo och HTML/JS-källa
- WikiLovesMonuments (Wikidata-upplaga) som ett lite mer ambitiöst exempel
- git-förvar
Teknik
Översättningar lagras i databasen på Toolforge. Gamla versioner översättningar behålls och översättningarna attribueras respektive redigerare. (Det finns också en "senaste ändringarna".)
To simplify access to translation data, all translations are also stored in JSON files, which are updated on every change. Example "demotool1":
- toolinfo.json, a JSON file with information about the tool
- en.json, the JSON file containing the English translation of that tool. Other languages work in the same manner, with the respective language code
There is also a JSON file with all valid languages.
Database
The source data is stored in the s53069__tooltranslate_p
database on tools-db on Toolforge (mysql --defaults-file=~/replica.my.cnf -h tools-db s53069__tooltranslate_p
). Data can be fetched from there as well if needed.
Following tables are available:
- 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
There is a PHP class that you can include on Toolforge, like so:
require_once ( "/data/project/tooltranslate/public_html/tt.php") ;
You can then instantiate the class:
$tt = new ToolTranslation ( array ( 'tool' => 'your_tool_key' , 'language' => 'de' , 'fallback' => 'en' , 'highlight_missing' => true ) ) ; // <span lang="en" dir="ltr" class="mw-content-ltr">Everything except 'tool' is optional</span>
Direct usage
There are two ways of getting interface translations in PHP. One is directly getting a translated string
print "<p>" . $tt->t('translation_key') . "</p>" ;
But this has the disadvantage that the translation cannot be changed without reloading the page.
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') ;
See this tool for a working example.