TopicTranslationsPlugin manages topics translations into several languages, by assigning suffixes to topic names corresponding to known languages. TopicTranslationsPlugin also automatically redirects users to the best available translation, based on the languages available and the languages informed as acceptable by the user.
Each web that is going to use TopicTranslationsPlugin must define a variable named
%TOPICTRANSLATIONS%
, which must contains a comma-delimited list of language
code. %TOPICTRANSLATIONS%
can be defined TWiki-wide, which means that those
languages will be used for the entire TWiki installation. It can also be defined
per user. If none of th above is set, the plugin setting for TopicTranslationsPlugin
with the same name (%TOPICTRANSLATIONS%
) will be used as a default.
For example:
* Set TOPICTRANSLATIONS = pt-br, en, fr
TopicTranslationsPlugin will then use suffixes in the topic names to "recognize"
each topic's translations. In the example above, the translations for, say,
SomeTopic
, will be the following:
SomeTopic
will be the original version (assumed to be written in pt-br
)
Trash.PMTSomeTopicEn
will be the 1st translation (in en
)
SomeTopicFr
will be the 2nd translation (in fr
)
Important: we'll assume that the first language listed in %TOPICTRANSLATIONS%
is the default one. Thus, the topics with no language suffixes are assumed to be written in
that language.
Follows the plugin's available tags, along with examples of their usage.
%TRANSLATIONS{}%
List a topic's translations, even if they don't exist yet (so we can create them!)
Parameters for %TRANSLATIONS{}%
:
"MyTopic"
or topic="MyTopic"
: indicates the topic that must have translations listed. Can be "MyTopic"
or "Web.MyTopic"
. Defaults to the current topic.
format="..."
: provides a custom formatting for the list of available translations. This format will be used for each available language. The following variables will be expanded in the format: $language | The language code for the current language. |
$topic | The topic whose translations we are listing. |
$translation | the topic corresponding to the current translation. |
$web | the web containing the translations |
"[[$web.$translation][$language]]"
missingformat
: like format
, but used for translations that were not written yet. Supports the same variables as format
and defaults to the same value of format
.
separator="..."
: text that will separate the items in the listing. Defaults to " "
(a space)
which="..."
: controls which translations must be listed. Possible values are: available | lists only the available translations (i.e., those who were already written). |
missing | lists only the missing translations (i.e., those who weren't written yet). |
all | lists all the translations |
"all"
.
%CURRENTLANGUAGE%
The language detected for the current topic (based on the current topic's name suffix).
%DEFAULTLANGUAGE%
The default language (i.e., the first of the listed in %TOPICTRANSLATIONS%
)
%INCLUDETRANSLATION{SomeTopic}%
Includes the translation of SomeTopic
that is in the same language as the current topic
(as detected based on current topic's name suffix)
Parameters for %INCLUDETRANSLATION{}%
:
"MyTopic"
: include the suitable MyTopic
translation. Can be "MyTopic"
or "Web.MyTopic"
.
rev="1.2"
: include the topic's revision 1.2
(for example). Defaults to the current revision.
The initial motivation for this tag is to include a suitable menu, for example, based on current topic's language. But there are several other possibilities.
%BASETRANSLATION{...}%
Expands to the name of the original topic (the one we are translating), i.e. the name of current topic without any language suffix.
Parameters supported:
topic="MyTopic"
: find base translation for MyTopic
instead of current topic.
%TRANSLATEMESSAGE{...}%
Displays the correct version of some text according to the language of the current topic. Example:
%TRANSLATEMESSAGE{en="English" pt-br="Portugu�s"}%
display English
when in the English version of a topic, and Portugu�s when in the Brazilian
Portuguese version.
It's useful when used in conjuntcion with a view VIEW_TEMPLATE setting or some
similar way of making TWiki-editable custom layouts (like the obsolete
TWiki:Main/FreeSkin), or even site-specific custom skins.
Warnings:
TopicTranslationsPlugin is capable of automatically redirecting to the available translation best suited to the user's language. Once TopicTranslationsPlugin is installed, this will happen by default.
REDIRECT_METHOD
is http
, then the Accept-Language
header sent by the user agent (the browser, most of the times) is used by I18N::AcceptLanguage
Perl module to detect the language.
REDIRECT_METHOD
is user
, then the "LANGUAGE" user preference is used as the preferred language.
view
and viewauth
(off course)
edit
script.
Referer
header sent by the user agent.
The automatic redirection can be disabled by setting the TopicTranslationsPlugin's
preference flag DISABLE_AUTOMATIC_REDIRECTION
(i.e., setting its value to something different
from no
, off
and 0
).
Note: in TWiki:Codev/CairoRelease, to make this work you'll have to apply the
following patch to
TWiki/Func.pm
module (got from TWiki's Subversion repository):
--- /var/lib/twiki/lib/TWiki/Func.pm 2005-07-02 13:33:46.893777128 -0300 +++ Func.pm 2005-07-02 13:37:22.187047576 -0300 @@ -407,8 +407,9 @@ sub getPluginPreferencesFlag { my( $theKey ) = @_; - my $value = getPluginPreferencesValue( $theKey ); - return TWiki::Prefs::formatAsFlag($value); + my $package = caller; + $package =~ s/.*:://; # strip off TWiki::Plugins:: prefix + return TWiki::Prefs::getPreferencesFlag( "\U$package\E_$theKey" ); } # =========================
Test![]() |
Actual test(work if the plugin is installed) |
---|---|
%CURRENTLANGUAGE% | %CURRENTLANGUAGE% |
%DEFAULTLANGUAGE% | %DEFAULTLANGUAGE% |
%TRANSLATIONS% | %TRANSLATIONS% |
%TRANSLATIONS{format="[[$translation][$language translation]]" separator=", "}% | %TRANSLATIONS{format="$language translation " separator=", "}% |
Plugin settings are stored as preferences variables. To reference a plugin setting write %<plugin>_<setting>%
, i.e. %INTERWIKIPLUGIN_SHORTDESCRIPTION%
data/debug.txt
)
yes
to disable.
Note: You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the server where TWiki is running.
TopicTranslationsPlugin.zip
in your twiki installation directory. Content: File: | Description: |
---|---|
data/TWiki/TopicTranslationsPlugin.txt | Plugin topic |
data/TWiki/TopicTranslationsPlugin.txt,v | Plugin topic repository |
lib/TWiki/Plugins/TopicTranslationsPlugin.pm | Plugin Perl module |
configure
in your TWiki installation, and enable the plugin in the {Plugins} section.
Plugin Author: | TWiki:Main.AntonioTerceiro![]() |
Copyright: | © 2006, TWiki:Main.AntonioTerceiro![]() |
License: | GPL (GNU General Public License![]() |
Plugin Version: | 03 Jul 2005 (V1.003) |
Change History: | |
23 Sep 2006 | New %TRANSLATEMESSAGE{}% tag; thanks to TWiki:Main/CarlaFreitas![]() ![]() |
04 Sep 2006 | new version released. Added patch from TWiki:Main/BeomsuChang![]() ![]() |
03 Jul 2005 | Version 1.003 : fixed to redirect only during view=/=viewauth |
02 Jul 2005 | Version 1.002 : major rewrite; documented all (or almost all :)) the code; added selection of available/missing translations; added missingformat ; added support for custom topics (and webs) in %TRANSLATIONS% ; added automatic redirection for the "best" translation (detection via I18N::AcceptLanguage ). |
19 Jun 2005: | Initial version: 1.001 |
TWiki Dependency: | $TWiki::Plugins::VERSION 1.024 |
CPAN Dependencies: | I18N::AcceptLanguage |
Other Dependencies: | none |
Perl Version: | 5.005 |
TWiki:Plugins/Benchmark![]() |
GoodStyle 100%, FormattedSearch 100%, TopicTranslationsPlugin 100% |
Plugin Home: | http://TWiki.org/cgi-bin/view/Plugins/TopicTranslationsPlugin![]() |
Feedback: | http://TWiki.org/cgi-bin/view/Plugins/TopicTranslationsPluginDev![]() |
Appraisal: | http://TWiki.org/cgi-bin/view/Plugins/TopicTranslationsPluginAppraisal![]() |
Related Topics: TWikiPreferences, TWikiPlugins
-- TWiki:Main.AntonioTerceiro - 03 Jul 2005