On this page I collect some points for the new i18n infrastructure
- backend
- it is not really important (sql, files, ...)
- user frontend
- a web interface, for 'quick' translations of some sentens etc
- a web/wget interface to get a file with some untranslated textes
- a mail interface (like the old ddtp), for offline processing
- export modules
- the exporter creates the translated text in a useable format on a daily base or on request. e.g downloadable po-files for a single package, real deb source packages for XXXX-i18n.deb's, Translations-Files for apt, ...
- import modules
- scripts collecting new data from the source packages, cvs, etc or pushs from external sources
some orga points:
- every translated text is owned by his translator. After he translate the text, only he can change the translation
- if an other translator/reviewer change a text, the first translator get something like a bug report
- if the first translator don't respond in XX days, he lost the ownership of the translation (XX is set per language)
- maybe it is usefull in some parts of the i18n system to have more than one owner per string.
- how you get untranslated text, you can get translated text for a review (for spell checking, translation, etc.)
- if a translation gets the 'ok' from XX reviewer and the owner, the translation is finished and can be used from the exporter (XX is set per language)
- in general a translator gets the english text for the source of his translation. But he can also get a translated and finished reviewed text as source. (like a ru-text for a pl translation) (the same for a reviewer)
- a translator/reviewer can request for a specified text or for a random text (like get the text from the manpage XXX or get some manpage)
- every text has a priority value (maybe 0-100) ('important' text from a "Priority: required" package gets something like 100, text from a "Priority: extra" libXXXX-XXX gets something like 0...)
- when a translator/reviewer requests for a random text to translate/review (e.g give me any manpage to translate), the framework shows text with a high priority value first
- everybody can subscribe to a special text or a type of text and get mail announcements for upload of a new translation, a translation get finished, etc
- the new i18n infrastructure could be divided in parts: debconf template, debian related manpages, other manpages, debian descriptions, debian po files, other po files, ...
- the web interface must be used authorisation (with password)
- the system supports mass changes with regular expression by the language coordinator, e.g s/passwort/password/
- the system supports change/del/... of owners/reviewer/... by the language coordinator
- if the owner is po-file based (and not per string), other translators should make proposals of translations
- the system know which text are sent for offline translation/reviewing. This kind of texts are not send or show to translators/reviewer.
- the translator and reviewer should add comments to the translation
- every user (with a working email address) can help und work with the system
Ok, now I write some flow sheets (as text) with a example of a programm. Maybe someone find errors, a better sheet and we can start to write a programm like this...
- general point
- set the owner, reviewer, priority per pot file
- organize the translations in path /$part/$proj/pot-files ($proj is often a src/bin-package name) e.g:
- debian-man/debconf/debconf.1.pot
- debian-man/debconf/dpkg-preconfigure.8.pot
- debian-man/debconf/dpkg-reconfigure.8.pot
- ddtp/all/ibm-3270.pot
- ddtp/all/3dchess.pot
- po/gimp/po.pot
- po/gimp/po-libgimp.pot
- po/gimp/po-plug-ins/de.pot
- all authenticated users can contrib to the system, we only need a working email address
- save to all msgid, translation and suggestions the date of the last update
- question:
- need we the support for a other 'default' language? (default=english)
- import
- get/generate a complete pot file
- generate/update the po file for all supported languages
- update the db with the infos from the pot/po files
- run hook: pre_upload_pot_file_hook
- autotranslating and set this msgstr with fuzzy flag
- update msgid, msgstr, comments in the db
- add fuzzy msgstr as suggestion
- update uptodate/outdate flags
- set owner of the pot file if default_owner[$lang][$part][$proj][$name] (or default_owner[$lang][$part][$proj][default] or ...) is set
- set 'pending: need to translate' for all msgids (if the owner was set)
- set reviewers of the pot file if default_reviewers[$lang][$part][$proj][$name] (or default_reviewers[$lang][$part][$proj][default] or ...) is set
- calculate and store the priority of the pot file
- run hook: post_upload_pot_file_hook
- mailing the owner for check the pending msgids
- send mails to the subscribed mail addresses
- run hook: pre_upload_pot_file_hook
- upload a new translation/review
- upload a po file (maybe with only one msgid/msgstr block)
- extract msgid, msgstr (maybe with plural), translation-comments, uploader email address, pot-path
- for each msgid: find in db
- not in db, find msgid als msgstr?
- found, set msgid as the msgid from the founded msgstr ...
not found -> error "msg not in db"
- found in db, is owned?
- no, not owned:
- own the pot
- update msgstr in db
- update comments in db
- run hook: new_msgstr_hook
- maybe spell checking
- set 'pending: need to review' for all reviewer
- write mails to the reviewer
- send mails to the subscribed mail addresses
- yes, owned; is upload a reviewer?
- yes, upload is a reviewer of the pot
- is msgstr the same as in the db?
- yes, is the same:
- set 'pass the review by this reviewer'
- if all needed reviewer have reviewed the msgstr, set the flag 'finished'
- run hook: pass_review_hook
- send mails to the subscribed mail addresses
- no, is not the same:
- set 'unpass the review by this reviewer'
- set 'pending: need to review' for the uploader (if the reviewer was set)
- add msgstr and comment as suggestion from the uploader
- run hook: add_suggestion_hook
- send mails to the subscribed mail addresses
- run hook: unpass_review_hook
- send mails to the subscribed mail addresses
- yes, is the same:
- is msgstr the same as in the db?
- no, upload is not a reviewer of the pot
- update msgstr and comments as a suggestion from the uploader to msgid (only one per user)
- run hook: add_suggestion_hook
- send mails to the subscribed mail addresses
- yes, upload is a reviewer of the pot
- no, not owned:
- not in db, find msgid als msgstr?
- request msgids from a $part for translate
- get the requested $to_lang
- get the requested $from_lang, default to english
- get the number of untranslated msgids, max to $max_requests_msgid[$lang][$part][$proj]
- if a $proj/pot-files request?
- yes, pot-file is requested
- $select=$proj/pot-files
- goto [1]
- yes, pot-file is requested
- if a $proj request?
- yes, $proj is requested
- set $select to all in $lang untranslated and unsend pot files in $proj, sorted by priority
- goto [1]
- yes, $proj is requested
- set $select to all in $lang untranslated and unsend pot files, sorted by priority
- [1]
- update 'sended' in the db
- if the $from_lang is not the default, search the reviewed translation of the msgid in $from_lang, and use this as $msgid
- set 'pending: need to translate' for all (orig) msgids (if the owner was set)
- gernate a po files with all msgid, msgstr, global comments and suggestion
- send this po files
- request msgids from a $part for review
- get the requested $to_lang
- get the number of untranslated msgids, max to $max_requests_msgid[$lang][$part][$proj]
- if a $proj/pot-files request?
- yes, pot-file is requested
- $select=$proj/pot-files
- is translated?
- yes, goto [1]
- no, error
- yes, pot-file is requested
- if a $proj request?
- yes, $proj is requested
- set $select to all in $lang translated and need to review pot files in $proj, sorted by priority
- goto [1]
- yes, $proj is requested
- set $select to all in $lang translated and need to review pot files, sorted by priority
- [1]
- set requester as reviewer of the pot
- set 'pending: need to review' for all (orig) msgids, if the requester is a new reviewer of this pot
- gernate a po files with all msgid, msgstr, global comments and suggestion
- send this po files
- daily tasks
find all owner, with not 'won't fix' taged suggestion and if last upload > X dayis, send him a mail
find all owner, with not 'won't fix' taged suggestion and if last upload > XX dayis, replace owner with default_owner[$lang][$part][$proj][$name], or remove him
find all reviewer, with 'pending: need to review' and last upload > X days, send him a mail
find all reviewer, with 'pending: need to review' and last upload > XX days, replace him with default_reviewers[$lang][$part][$proj][$name], or remove him