Internationalizing pages

Ask a Question related to PHP Development, Design and Development.

  1. #1

    Default Internationalizing pages

    Hi,
    I'm writing a site in PHP with mySQL. I've decided to have it in several
    languages, but don't want to use XML just yet. So, I was wondering if
    anyone has done it before and have some ideas. :)
    Basically, I've come up with this: create include files with error
    messages/page text/etc. and define 2-dimensional arrays, say:

    global $errors;
    $errors = array("id_error1" => ("en" => "error in english",
    "de" => "error in german",
    "fr" => "error in french",
    ...
    ),
    "id_error2" => ...
    );

    then define a function, say,

    getLangText($array,$id) {
    global $$array;
    global $lang;
    $msg = $$array[$id];
    return $msg[$lang];
    }

    where $lang is a global variable containing locality string. So, if we
    need error1, we'd call:

    echo getLangText("errors","error1");

    This would work, but I thought maybe someone has a more elegant solution :)

    Thanks
    Lüpher Cypher Guest

  2. Similar Questions and Discussions

    1. Make new pages or only edit pages?
      A client asked me to update his site, adding a new link to all pages and adding several new pages. He told me that the original developer of the...
    2. Master Pages won't apply to certain document pages
      Hello. I'm working on a book and using a couple of simple master pages. On certain live pages the master pages objects don't show up, but they do on...
    3. Internationalizing ASPs containing Javascript?
      Hello - I am presently developing some ASPs that contain Javascript for the client-side scripting - for a few buttons, some text boxes, and drop-...
    4. Can only print 44 pages, or 88 facing pages
      I am running Indesign 2.0, and when I print, or even export to PDF, I encounter an odd problem where I can only print up to 44 pages, or up to 88...
    5. How to print 3 small pages wide by 5 pages tall in one spread?
      Hi Vincent, I'm having a similar problem. My dilemma is that I've created a raffle ticket design and to save paper have tiled them 5 to an A4...
  3. #2

    Default Re: Internationalizing pages

    Lüpher Cypher wrote:
    > Hi,
    > I'm writing a site in PHP with mySQL. I've decided to have it in several
    > languages, but don't want to use XML just yet. So, I was wondering if
    > anyone has done it before and have some ideas. :)
    > Basically, I've come up with this: create include files with error
    > messages/page text/etc. and define 2-dimensional arrays, say:
    >
    > global $errors;
    > $errors = array("id_error1" => ("en" => "error in english",
    > "de" => "error in german",
    > "fr" => "error in french",
    > ...
    > ),
    > "id_error2" => ...
    > );
    >
    > then define a function, say,
    >
    > getLangText($array,$id) {
    > global $$array;
    > global $lang;
    > $msg = $$array[$id];
    > return $msg[$lang];
    > }
    >
    > where $lang is a global variable containing locality string. So, if we
    > need error1, we'd call:
    >
    > echo getLangText("errors","error1");
    >
    > This would work, but I thought maybe someone has a more elegant solution :)
    What I had done, if I had done somethign similare would have been

    create languges include files for each language, eg: lang_en.php lang_fi.php

    In the langauge file, I would use defines for each error message.

    Depending on what language is used, I would include that languages and use the
    defines to get the error message you want.

    IMHO this would be easier to handle and you get less ram used and a fraction
    faster too.


    //Aho


    J.O. Aho Guest

  4. #3

    Default Re: Internationalizing pages


    "J.O. Aho" <user@example.net> wrote in message
    news:2r4p5gF15f3nuU1@uni-berlin.de...
    > Lüpher Cypher wrote:
    >> Hi,
    >> I'm writing a site in PHP with mySQL. I've decided to have it in several
    >> languages, but don't want to use XML just yet. So, I was wondering if
    >> anyone has done it before and have some ideas. :)
    >> Basically, I've come up with this: create include files with error
    >> messages/page text/etc. and define 2-dimensional arrays, say:
    >>
    >> global $errors;
    >> $errors = array("id_error1" => ("en" => "error in english",
    >> "de" => "error in german",
    >> "fr" => "error in french",
    >> ...
    >> ),
    >> "id_error2" => ...
    >> );
    >>
    >> then define a function, say,
    >>
    >> getLangText($array,$id) {
    >> global $$array;
    >> global $lang;
    >> $msg = $$array[$id];
    >> return $msg[$lang];
    >> }
    >>
    >> where $lang is a global variable containing locality string. So, if we
    >> need error1, we'd call:
    >>
    >> echo getLangText("errors","error1");
    >>
    >> This would work, but I thought maybe someone has a more elegant solution
    >> :)
    >
    > What I had done, if I had done somethign similare would have been
    >
    > create languges include files for each language, eg: lang_en.php
    > lang_fi.php
    >
    > In the langauge file, I would use defines for each error message.
    >
    > Depending on what language is used, I would include that languages and use
    > the defines to get the error message you want.
    >
    > IMHO this would be easier to handle and you get less ram used and a
    > fraction faster too.
    I agree. Have a separate file for each language rather than a single file
    for every language.

    --
    Tony Marston

    [url]http://www.tonymarston.net[/url]



    Tony Marston Guest

  5. #4

    Default Re: Internationalizing pages

    Tony Marston wrote:
    > "J.O. Aho" <user@example.net> wrote in message
    > news:2r4p5gF15f3nuU1@uni-berlin.de...
    >
    >>Lüpher Cypher wrote:
    >>
    >>>Hi,
    >>>I'm writing a site in PHP with mySQL. I've decided to have it in several
    >>>languages, but don't want to use XML just yet. So, I was wondering if
    >>>anyone has done it before and have some ideas. :)
    >>>Basically, I've come up with this: create include files with error
    >>>messages/page text/etc. and define 2-dimensional arrays, say:
    >>>
    >>>global $errors;
    >>>$errors = array("id_error1" => ("en" => "error in english",
    >>> "de" => "error in german",
    >>> "fr" => "error in french",
    >>> ...
    >>> ),
    >>> "id_error2" => ...
    >>> );
    >>>
    >>>then define a function, say,
    >>>
    >>>getLangText($array,$id) {
    >>> global $$array;
    >>> global $lang;
    >>> $msg = $$array[$id];
    >>> return $msg[$lang];
    >>>}
    >>>
    >>>where $lang is a global variable containing locality string. So, if we
    >>>need error1, we'd call:
    >>>
    >>>echo getLangText("errors","error1");
    >>>
    >>>This would work, but I thought maybe someone has a more elegant solution
    >>>:)
    >>
    >>What I had done, if I had done somethign similare would have been
    >>
    >>create languges include files for each language, eg: lang_en.php
    >>lang_fi.php
    >>
    >>In the langauge file, I would use defines for each error message.
    >>
    >>Depending on what language is used, I would include that languages and use
    >>the defines to get the error message you want.
    >>
    >>IMHO this would be easier to handle and you get less ram used and a
    >>fraction faster too.
    >
    >
    > I agree. Have a separate file for each language rather than a single file
    > for every language.
    Ok, that makes sense :) The only drawback is that whenever I need to add
    a string, I'll have to go through several files and may forget to update
    one of them, as opposed to having them all in one file - I'll be
    "forced" to update all strings :) The thing is, the site will consist of
    several parts, only one of which will be shown, therefore I don't really
    need to have one large file for all of them (I put the parts into
    separate directories, since they are kind of "subsites" themselves) :)
    Another problem with several files is looking up strings by id: when
    they are in one file, I'll just have to find one id and I can make sure
    the string is ok in all languages at once, with separate files I'll have
    to look in several places :) I think that could be important if I add a
    language that I don't really know (say, if someone provides a
    translation for me) :)

    Thanks
    Lüpher Cypher Guest

  6. #5

    Default Re: Internationalizing pages

    .oO(Lüpher Cypher)
    >I'm writing a site in PHP with mySQL. I've decided to have it in several
    >languages, but don't want to use XML just yet. So, I was wondering if
    >anyone has done it before and have some ideas. :)
    Have a look at gettext.

    [url]http://www.php.net/gettext[/url]

    Micha
    Michael Fesser Guest

  7. #6

    Default Re: Re: Internationalizing pages

    "Lpher_Cypher" wrote:
    > Tony Marston wrote:
    >
    > > "J.O. Aho" &lt;user@example.net&gt; wrote in message
    > > news:2r4p5gF15f3nuU1@uni-berlin.de...
    > >
    > &nbsp;>>Lüpher Cypher wrote:
    > &nbsp;>>
    > &nbsp;&nbsp;>>>Hi,
    > &nbsp;&nbsp;>>>I'm writing a site in PHP with mySQL. I've
    > decided to have it in several
    > &nbsp;&nbsp;>>>languages, but don't want to use XML just yet.
    > So, I was wondering if
    > &nbsp;&nbsp;>>>anyone has done it before and have some ideas.
    > :)
    > &nbsp;&nbsp;>>>Basically, I've come up with this: create
    > include files with error
    > &nbsp;&nbsp;>>>messages/page text/etc. and define
    > 2-dimensional arrays, say:
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>global $errors;
    > &nbsp;&nbsp;>>>$errors = array("id_error1" =&gt; ("en" =&gt;
    > "error in english",
    > &nbsp;&nbsp;>>> "de" =&gt; "error in german",
    > &nbsp;&nbsp;>>> "fr" =&gt; "error in french",
    > &nbsp;&nbsp;>>> ...
    > &nbsp;&nbsp;>>> ),
    > &nbsp;&nbsp;>>> "id_error2" =&gt; ...
    > &nbsp;&nbsp;>>> );
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>then define a function, say,
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>getLangText($array,$id) {
    > &nbsp;&nbsp;>>> global $$array;
    > &nbsp;&nbsp;>>> global $lang;
    > &nbsp;&nbsp;>>> $msg = $$array[$id];
    > &nbsp;&nbsp;>>> return $msg[$lang];
    > &nbsp;&nbsp;>>>}
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>where $lang is a global variable containing
    > locality string. So, if we
    > &nbsp;&nbsp;>>>need error1, we'd call:
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>echo getLangText("errors","error1");
    > &nbsp;&nbsp;>>>
    > &nbsp;&nbsp;>>>This would work, but I thought maybe someone
    > has a more elegant solution
    > &nbsp;&nbsp;>>>:)
    > &nbsp;>>
    > &nbsp;>>What I had done, if I had done somethign similare
    > would have been
    > &nbsp;>>
    > &nbsp;>>create languges include files for each language, eg:
    > lang_en.php
    > &nbsp;>>lang_fi.php
    > &nbsp;>>
    > &nbsp;>>In the langauge file, I would use defines for each
    > error message.
    > &nbsp;>>
    > &nbsp;>>Depending on what language is used, I would include
    > that languages and use
    > &nbsp;>>the defines to get the error message you want.
    > &nbsp;>>
    > &nbsp;>>IMHO this would be easier to handle and you get less
    > ram used and a
    > &nbsp;>>fraction faster too.
    > >
    > >
    > > I agree. Have a separate file for each language rather than
    > a single file
    > > for every language.
    >
    > Ok, that makes sense :) The only drawback is that whenever I
    > need to add
    > a string, I'll have to go through several files and may forget
    > to update
    > one of them, as opposed to having them all in one file - I'll
    > be
    > "forced" to update all strings :) The thing is, the site will
    > consist of
    > several parts, only one of which will be shown, therefore I
    > don't really
    > need to have one large file for all of them (I put the parts
    > into
    > separate directories, since they are kind of "subsites"
    > themselves) :)
    > Another problem with several files is looking up strings by
    > id: when
    > they are in one file, I'll just have to find one id and I can
    > make sure
    > the string is ok in all languages at once, with separate files
    > I'll have
    > to look in several places :) I think that could be important
    > if I add a
    > language that I don't really know (say, if someone provides a
    > translation for me) :)
    >
    > Thanks
    Your other option to keep things nicely synchronized (you have a valid
    point there), is to create language tables in mysql, where every
    column is for a different langugage. That way, things are nicely in
    synch. There are no performance issues with mysql since mysql can
    cache (by default) query results that are not changing.

    --
    [url]http://www.dbForumz.com/[/url] This article was posted by author's request
    Articles individually checked for conformance to usenet standards
    Topic URL: [url]http://www.dbForumz.com/PHP-Internationalizing-pages-ftopict151183.html[/url]
    Visit Topic URL to contact author (reg. req'd). Report abuse: [url]http://www.dbForumz.com/eform.php?p=506567[/url]
    steve Guest

  8. #7

    Default Re: Internationalizing pages

    Having worked on localisation projects in the past and being in the
    process of writing a PHP/Smarty driven site in multiple languages, I
    hope I can help.

    I have indeed created what I call "language packs", each file a PHP with
    an array of strings something like:

    $strings = array(
    "TEXT1" => "Text 1",
    "TEXT2" => "Text 2",
    "TEXT3" => "Text 3"
    );

    You can use a db approach (such as ACCESS) to manage the string
    translation with an export function to produce automatically the
    language packs on demand.

    Using the strings array approach you can make your localisation text
    available both to PHP code and to SMARTY code segments (using the ASSIGN
    function to create an equivalent Smarty variable)

    You should bear in mind though that INTERNATIONALISATION is not limited
    the "translation" of words. If you wish to offer your PHP program to
    various audiences around the world bear in mind that DATE and NUMBER
    formats are different across the world and you will encounter complex
    situations to manage when STORING, VIEWING and MANIPULATING data across
    multiple data standards around the world. Rule number one, remember that
    everything will be converted back into basic (anglo-saxon based) formats
    (20040922, 12345690192.00 etc) for numbers and accents needed to be
    handled carefully.

    Hope this helps...

    Jonathan
    Jonathan Smith Guest

  9. #8

    Default Re: Internationalizing pages

    steve wrote:
    > "Lpher_Cypher" wrote:
    > > Tony Marston wrote:
    > >
    > > > "J.O. Aho" &lt;user@example.net&gt; wrote in message
    > > > news:2r4p5gF15f3nuU1@uni-berlin.de...
    > > >
    > > &nbsp;>>Lüpher Cypher wrote:
    > > &nbsp;>>
    > > &nbsp;&nbsp;>>>Hi,
    > > &nbsp;&nbsp;>>>I'm writing a site in PHP with mySQL. I've
    > > decided to have it in several
    > > &nbsp;&nbsp;>>>languages, but don't want to use XML just yet.
    > > So, I was wondering if
    > > &nbsp;&nbsp;>>>anyone has done it before and have some ideas.
    > > :)
    > > &nbsp;&nbsp;>>>Basically, I've come up with this: create
    > > include files with error
    > > &nbsp;&nbsp;>>>messages/page text/etc. and define
    > > 2-dimensional arrays, say:
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>global $errors;
    > > &nbsp;&nbsp;>>>$errors = array("id_error1" =&gt; ("en" =&gt;
    > > "error in english",
    > > &nbsp;&nbsp;>>> "de" =&gt; "error in german",
    > > &nbsp;&nbsp;>>> "fr" =&gt; "error in french",
    > > &nbsp;&nbsp;>>> ...
    > > &nbsp;&nbsp;>>> ),
    > > &nbsp;&nbsp;>>> "id_error2" =&gt; ...
    > > &nbsp;&nbsp;>>> );
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>then define a function, say,
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>getLangText($array,$id) {
    > > &nbsp;&nbsp;>>> global $$array;
    > > &nbsp;&nbsp;>>> global $lang;
    > > &nbsp;&nbsp;>>> $msg = $$array[$id];
    > > &nbsp;&nbsp;>>> return $msg[$lang];
    > > &nbsp;&nbsp;>>>}
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>where $lang is a global variable containing
    > > locality string. So, if we
    > > &nbsp;&nbsp;>>>need error1, we'd call:
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>echo getLangText("errors","error1");
    > > &nbsp;&nbsp;>>>
    > > &nbsp;&nbsp;>>>This would work, but I thought maybe someone
    > > has a more elegant solution
    > > &nbsp;&nbsp;>>>:)
    > > &nbsp;>>
    > > &nbsp;>>What I had done, if I had done somethign similare
    > > would have been
    > > &nbsp;>>
    > > &nbsp;>>create languges include files for each language, eg:
    > > lang_en.php
    > > &nbsp;>>lang_fi.php
    > > &nbsp;>>
    > > &nbsp;>>In the langauge file, I would use defines for each
    > > error message.
    > > &nbsp;>>
    > > &nbsp;>>Depending on what language is used, I would include
    > > that languages and use
    > > &nbsp;>>the defines to get the error message you want.
    > > &nbsp;>>
    > > &nbsp;>>IMHO this would be easier to handle and you get less
    > > ram used and a
    > > &nbsp;>>fraction faster too.
    > > >
    > > >
    > > > I agree. Have a separate file for each language rather than
    > > a single file
    > > > for every language.
    > >
    > > Ok, that makes sense :) The only drawback is that whenever I
    > > need to add
    > > a string, I'll have to go through several files and may forget
    > > to update
    > > one of them, as opposed to having them all in one file - I'll
    > > be
    > > "forced" to update all strings :) The thing is, the site will
    > > consist of
    > > several parts, only one of which will be shown, therefore I
    > > don't really
    > > need to have one large file for all of them (I put the parts
    > > into
    > > separate directories, since they are kind of "subsites"
    > > themselves) :)
    > > Another problem with several files is looking up strings by
    > > id: when
    > > they are in one file, I'll just have to find one id and I can
    > > make sure
    > > the string is ok in all languages at once, with separate files
    > > I'll have
    > > to look in several places :) I think that could be important
    > > if I add a
    > > language that I don't really know (say, if someone provides a
    > > translation for me) :)
    > >
    > > Thanks
    >
    > Your other option to keep things nicely synchronized (you have a valid
    > point there), is to create language tables in mysql, where every
    > column is for a different langugage. That way, things are nicely in
    > synch. There are no performance issues with mysql since mysql can
    > cache (by default) query results that are not changing.
    >
    Well, that's exactly what I'm doing for content in db :)
    Say, I have a news page so, I have a table:
    table news (
    ....
    text_en text ...
    text_de text ...
    )
    and then I just use a function, say, get_db_text($row,$field,$lang)
    which appends the language suffix to the field name :)

    But then, I still think it's easier to maintain the page content (which
    is not in db) through an include file, since if I need to edit something
    I wouldn't have to deal with queries etc. :)

    Lüph
    Lüpher Cypher Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139