egroupware/doc/html/devlangsup.html
2000-11-21 22:33:37 +00:00

491 lines
8.1 KiB
HTML
Raw Blame History

<HTML
><HEAD
><TITLE
>Using Language Support</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
REL="HOME"
TITLE="phpGroupWare Docs V0.05"
HREF="book1.html"><LINK
REL="UP"
TITLE="Developers Documentation"
HREF="p261.html"><LINK
REL="PREVIOUS"
TITLE="Configuration Variables"
HREF="devconfvar.html"><LINK
REL="NEXT"
TITLE="Using Templates"
HREF="devtemp.html"></HEAD
><BODY
CLASS="CHAPTER"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>phpGroupWare Docs V0.05</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="devconfvar.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="devtemp.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="CHAPTER"
><H1
><A
NAME="DEVLANGSUP"
>Chapter 27. Using Language Support</A
></H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="devlangsup.html#AEN632"
>Overview</A
></DT
><DT
><A
HREF="devlangsup.html#AEN635"
>How to use lang support</A
></DT
><DT
><A
HREF="devlangsup.html#AEN644"
>The lang function</A
></DT
><DT
><A
HREF="devlangsup.html#AEN668"
>Adding translation data</A
></DT
><DT
><A
HREF="devlangsup.html#AEN672"
>The lang table</A
></DT
><DT
><A
HREF="devlangsup.html#AEN695"
>lang.sql</A
></DT
><DT
><A
HREF="devlangsup.html#AEN706"
>Common return codes</A
></DT
></DL
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN632"
>Overview</A
></H4
><P
> phpGroupWare is built using a multi-language support scheme. This means the pages can be
translated to other languages very easily. Translations of text strings are
stored in the phpGroupWare database, and can be modified by the phpGroupWare
administrator.
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN635"
>How to use lang support</A
></H4
><P
> The <TT
CLASS="CLASSNAME"
>lang()</TT
> function is your application's interface to phpGroupWare's
internationalization support.
While developing your application, just wrap all your text output with calls to
lang(), as in the following code:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
> $x = 42;
echo lang("The counter is %1",$x)."&#60;br&#62;";</PRE
></TD
></TR
></TABLE
>
This will attempt to translate "The counter is %1", and return a translated version
based on the current application and language in use. Note how the position that
<TT
CLASS="CLASSNAME"
>$x</TT
> will end up is controlled by the format string, <I
CLASS="EMPHASIS"
>not</I
> by
building up the string in your code. This allows your application to be translated
to languages where the actual number is not placed at the end of the string.
When a translation is not found, the original text will be returned with a * after
the string. This makes it easy to develop your application, then go back and
add missing translations (identified by the *) later.
Without a specific translation in the lang table, the above code will print:
<TT
CLASS="CLASSNAME"
>The counter is 42*&#60;br&#62;</TT
>
If the current user speaks Italian, they string returned may instead be:
<TT
CLASS="CLASSNAME"
>il contatore <20> 42&#60;br&#62;</TT
>
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN644"
>The lang function</A
></H4
><P
> <TT
CLASS="CLASSNAME"
>lang($key, $m1="", $m2="", $m3="", $m4="", $m5="",
$m6="", $m7="", $m8="", $m9="", $m10="")
</TT
>
<P
></P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
>$key</DT
><DD
><P
>is the string to translate and may contain replacement directives of the form <TT
CLASS="CLASSNAME"
>%n</TT
>. </P
></DD
><DT
>$m1</DT
><DD
><P
> is the first replacement value or may be an array of replacement values (in which case $m2 and above are ignored). </P
></DD
><DT
>$m2</DT
><DD
><P
>- $m10/ the 2nd through 10th replacement values if $m1 is not an array. </P
></DD
></DL
></DIV
>
The database is searched for rows with a <TT
CLASS="CLASSNAME"
>lang.message_id</TT
> that matches <TT
CLASS="CLASSNAME"
>$key</TT
>.
If a translation is not found, the original <TT
CLASS="CLASSNAME"
>$key</TT
> is used. The translation engine then replaces
all tokens of the form <TT
CLASS="CLASSNAME"
>%N</TT
> with the Nth parameter (either <TT
CLASS="CLASSNAME"
>$m1[N]</TT
> or <TT
CLASS="CLASSNAME"
>$mN</TT
>).
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN668"
>Adding translation data</A
></H4
><P
> An application called <I
CLASS="EMPHASIS"
>Transy</I
> is being developed to make this easier, until then you can create
the translation data manually.
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN672"
>The lang table</A
></H4
><P
> The translation class uses the lang table for all translations.
We are concerned with 4 of the columns to create a translation:
<P
></P
><DIV
CLASS="VARIABLELIST"
><DL
><DT
>message_id</DT
><DD
><P
> The key to identify the message (the <TT
CLASS="CLASSNAME"
>$key</TT
> passed
to the <TT
CLASS="CLASSNAME"
>lang()</TT
> function). This is written in English.
</P
></DD
><DT
>app_name</DT
><DD
><P
> The application the translation applies to, or
<TT
CLASS="CLASSNAME"
>common</TT
> if it is common across multiple applications.
</P
></DD
><DT
>lang</DT
><DD
><P
>The code for the language the translation is in. </P
></DD
><DT
>content</DT
><DD
><P
>The translated string. </P
></DD
></DL
></DIV
>
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN695"
>lang.sql</A
></H4
><P
> Currently all applications, and the core phpGroupWare source tree
have a <TT
CLASS="CLASSNAME"
>lang.sql</TT
> file. This is the place to add translation
data. Just add lines of the form:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>REPLACE INTO lang (message_id, app_name, lang, content)
VALUES( 'account has been deleted','common','en','Account has been deleted');</PRE
></TD
></TR
></TABLE
>
translating the <TT
CLASS="CLASSNAME"
>content</TT
> to reflect the <TT
CLASS="CLASSNAME"
>message_id</TT
> string in the <TT
CLASS="CLASSNAME"
>lang</TT
> language.
If the string is specific to your application, put your application name in for <TT
CLASS="CLASSNAME"
>app_name</TT
>
otherwise use the name <TT
CLASS="CLASSNAME"
>common</TT
>. The <TT
CLASS="CLASSNAME"
>message_id</TT
> should be in lower case for a small
increase in speed.
</P
></DIV
><DIV
CLASS="SIMPLESECT"
><H4
CLASS="SIMPLESECT"
><A
NAME="AEN706"
>Common return codes</A
></H4
><P
> If you browse through the phpGroupWare sources, you may notice
a pattern to the return codes used in the higher-level functions.
The codes used are partially documented in the <TT
CLASS="CLASSNAME"
>doc/developers/CODES</TT
>
file.
Codes are used as a simple way to communicate common error and progress
conditions back to the user. They are mapped to a text string through the
<TT
CLASS="CLASSNAME"
>check_code()</TT
> function, which passes the strings through
<TT
CLASS="CLASSNAME"
>lang()</TT
> before returning.
For example, calling
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>echo check_code(13);</PRE
></TD
></TR
></TABLE
>
Would print
<TT
CLASS="CLASSNAME"
>Your message has been sent</TT
>
translated into the current language.
</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="devconfvar.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="book1.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="devtemp.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Configuration Variables</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="p261.html"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Using Templates</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>