kansainvälistäminen ja paikallistaminen Zopessa Plonen käännöstyö Asko Soukka, Jyväskylän yliopisto asko.soukka@jyu.fi
Kääntämisvaihtoehdot Plonessa Localizer ja Translation Service käytön myötä kumuloituva sanasto sovellusten käyttämistä merkkijonoista sanaston kääntäminen ZMI-käyttöliittymässä Placeless Translation Service GNU gettext-pohjainen sovelluksen kehittäjä merkitsee käännettävät sanat ja lauseet lähdekoodiin (i18n) merkityt sanat ja lauseet kerätään ja käännetään sovellus ja kielikohtaiseen sanastotiedostoon (l10n)
Vapaaohjelmien kääntäminen GNU gettext GNU-projektin ratkaisu sovellusten kääntämisen mahdollistamiseen ja sen suorittamiseen ohjelmointikirjastot kaikille ohjelmointikielille i18n eli internationalization sovelluksen kansainvälistäminen eli sen paikallistamisen mahdollistaminen l10n eli localization kansainvälistetyn sovelluksen paikallistaminen
GNU gettext -kansainvälistetyn sovelluksen kääntäminen yleensä sovelluksen lähdekoodista kerätään käännettäväksi osoitetut merkkijonot yleisesti _( merkkijono ) merkkijonot kootaan sovelluskohtaiseen käännöspohjaan, joka edelleen käännetään kielikohtaiseksi käännöstiedostoksi sovellus.pot; POT = Portable Object Template sovellus-fi.po; PO = Portable Object sovellus-fi.mo; MO = Machine Object merkkijonoilla avainsanat, joilla yleensä sovelluskohtainen nimiavaruus (domain)
Käännöspohjan otsikkotiedot msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-11-05 06:30+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=charset\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "Language-Code: en\n" "Language-Name: English\n" "Preferred-Encodings: latin1 utf-8\n" "Domain: plone\n"
Käännettävä sana käännöspohjassa #: /CMFPlone/skins/plone_forms/registered.pt #. <p i18n:translate="description_you_can_log_on_now"> #. Click the button to log in immediately. #. </p> msgid "description_you_can_log_on_now" msgstr "Click the button to log in immediately."
Käännettävä sana käännöspohjassa #: /CMFPlone/skins/plone_forms/registered.pt konteksti #. <p i18n:translate="description_you_can_log_on_now"> #. Click the button to log in immediately. #. </p> avainsana msgid "description_you_can_log_on_now" msgstr "Click the button to log in immediately." käännös
Käännettävä sana käännöspohjassa #: /CMFPlone/skins/plone_forms/registered.pt #. <p i18n:translate="description_you_can_log_on_now"> #. Click the button to log in immediately. #. </p> msgid "description_you_can_log_on_now" msgstr " You can now click the button very gently to\n log into the system immidiately.\n
GNU gettext -kääntäminen Plonessa sovelluksista on käännettävissä ensisijaisesti sivupohjat (.pt,.zpt, Zopessa myös.dtml) valmiit.pot -käännöspohjat sijaitsevat sovelluksen lähdekoodin i18n/ -alihakemistossa.pot -tiedoston voi myös luoda käsin tai sen voi kokeilla sivupohjista generoida plone-i18n -projektin i18ndude -skriptillä http://sourceforge.net/projects/plone-i18n/ suomenkielisen -fi.po -käännöksen luominen kopioimalla ja täydentämällä.pot-pohjasta
i18ndude käännöspohjien generointi Plonen sivupohjista./i18ndude.py rebuild-pot -pot plone.pot -create plone `find CMFPlone/skins/ -name *.pt ` käännöspohjien päivitys, tarkistus, käännöksen kattavuuden tilastointi jne... ongelmia: tarkka sivupohjien XML-syntaksin oikeinkirjoituksesta, käännettäville merkkijonoille tulee olla erikseen merkitty avainsana
Plonen erikoisuudet käännöstyössä Python-lähdekoodissa ja -skripteissä ei käytetä GNU gettext -käännösrajapintaa kaikkia käännettäviä merkkijonoja ei löydy (eikä edes i18ndude löydä) sivupohjista sivupohjien tunnusten (id) kääntäminen suoraan Python-lähdekoodiin kirjoitettu englanti Python-skripteistä lähetettävät viestit Plone ei vielä kokonaisuudessaan käännettävissä? lomakkeiden tarkistuksen virheilmoitukset sisältökohteiden nimiä sisältävät viestit
Placeless Translation Service ZMI-käyttöliittymä ilmoittaa syntaksivirheet päivitetyn käännöksen lataaminen uudelleen kääntämättömien merkkijonojen tallennus: sovellus-fi.missing käännöstiedostot luetaan aakkosjärjestyksessä
Plone-sovelluksen kansainvälistäminen tarkoittaa käännettävissä olevien merkkijonojen merkitsemistä lähdekoodiin käännettävien merkkijonojen merkitseminen on mahdollista Zopen DTML-sivupohjiin (.dtml) Zopen ja Plonen ZPT-sivupohjiin (.pt,.zpt) Python-lähdekoodiin käännöspohjan generointi i18ndude:lla erikoisuuksien lisääminen käännöspohjaan käsin
i18n-syntaksi DTML-sivupohjassa <dtml-translate domain=plone> User name </dtml-translate>
i18n-syntaksi ZPT-sivupohjassa <html xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone" > <body> <h1 i18n:translate="id">id</h1> <a href="http://www.jyu.fi/" title= University of Jyväskylä i18n:attributes="title" i18n:translate= > University of Jyväskylä </a> </body>
i18n-syntaksi Python-lähdekoodissa from Products.PlacelessTranslationService.MessageID \ import MessageIDFactory _ = MessageIDFactory("plone") str_id = _('Id')
Plonen erikoisuudet sovelluksen kansainvälistämisessä sivupohjien tunnukset (id) lisättävä itse tiedostonimet ilman päätteitä toimivat käännösavainsanoina portaaliviestit lisättävä itse avainsanoinaan portal_status_message= foobar lomaketarkistuksen virheilmoitukset state.seterror('title', 'Required value is missing.', 'input_required') eivät toistaiseksi käänny PTS:n avulla?
Kohdealuekääntäminen oletussuomennos yleinen ja abstrakti Käyttäjätunnuksellasi ei ole oikeutta lisätä objektia. kohdealuekäännöksen ohittaminen kirjoittamalla käännös suoraan sivupohjaan kohdealuekäännöksen kirjoittaminen omaan käännöstiedostoon PTS lukee käännöstiedostot aakkosjärjestyksessä myöhemmin luettava käännöstiedosto korvaa aikaisemman
Kääntämisen valta ja vastuu?