Stories
Slash Boxes
Comments

News for nerds, stuff that matters

How Are You Accomplishing Your i18n?

Posted by Cliff on Thu Jun 23, 2005 01:25 PM
from the eighteen-letters-between-the-i-and-the-n dept.
cobrabyte asks: "My team has recently been given the task of implementing internationalization (i18n) in our MySQL databases (PHP-interfaced). Essentially, for every article X, we need it presented in any number of languages (once translated). As we were working on gathering the necessary procedures, we were very surprised to find that there's not much organized information regarding i18n using MySQL and PHP. Is the topic of i18n too new to garner any usable info?"
This discussion has been archived. No new comments can be posted.
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • by plcurechax (247883) on Thursday June 23 2005, @01:35PM (#12892336)
    (http://www.microsoft.com/)
    I'm not sure what the question is. Is it, how do we allow users to select a language? Is it, how to implement i18n in PHP based code? Is it, how to manage multiligual databases?

    I'm not sure what the question(s) is.
    • Re:What's the question? by cobrabyte (Score:1) Thursday June 23 2005, @01:54PM
      • Re:What's the question? by Otter (Score:2) Thursday June 23 2005, @02:16PM
        • Re:What's the question? by Ucklak (Score:2) Thursday June 23 2005, @02:41PM
          • Re:What's the question? by rylin (Score:1) Thursday June 23 2005, @02:45PM
          • Re:What's the question? (Score:5, Informative)

            by plcurechax (247883) on Thursday June 23 2005, @02:53PM (#12893170)
            (http://www.microsoft.com/)
            -without using some crappy 'BabelFish' layer

            Ask any government that supports multiple official languages (Canada, Switzerland, ...). You translate into the other language(s) using professional translators. Period. You can give them the most powerful automatic translation tools available, and multiple language dictionarys (e.g. English-French) but in the end you need a human professional translator to make translations worth reading.

            -without having to write a complete localized version for each language.

            You need to make the content management system (CMS) language aware, and you need to localize all your templates. Then you need to add a key to your article database for language, so the user can retrieve article 101 in either english or french. (think a long the lines of http://localhost/cms/display.php?article=101&lang= en [localhost] ).

            I know nothing about PHP programming, so I cannot comment on that, or MySQL (main gotcha I expect is datatype, UTF-8, iso8859-1, vs. windowspage1574). Two articles I found useful in general about internationalization are

            UTF-8 and Unicode FAQ for Unix/Linux by Markus Kahn
            How do I have to modify my software?
            http://www.cl.cam.ac.uk/~mgk25/unicode.html#mod [cam.ac.uk]

            The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
            http://www.joelonsoftware.com/articles/Unicode.htm l [joelonsoftware.com]

            [ Parent ]
          • Re:What's the question? by ShieldW0lf (Score:2) Friday June 24 2005, @04:07AM
      • 1 reply beneath your current threshold.
    • Some answers (Score:5, Informative)

      by JavaRob (28971) on Thursday June 23 2005, @07:01PM (#12895952)
      (http://jtheory.com/ | Last Journal: Tuesday March 28 2006, @10:45AM)
      I18n/localization is one of those tasks that has *lots* of questions that will need to be resolved... often you won't even know about all of the issues to resolve until you start digging into it.

      I sorted out the i18n design for a project recently, so I can share some insights on the process. My project used Java/JSP, but the problems are mostly the same. One of the most important points to be made is that you *need* to sit down and design it all the way through -- this is not a "feature" that can be easily added in when you need it later (and extreme programming teams can get hosed on this one pretty easily).

      Things to consider (in the sequence of a request for simplicity's sake):
      1) How will you know what language a user wants (first time, and on subsequent pages)? The user should be able to select/change their preference (though you could use their browser-reported locale as a guess), and they should be able to *bookmark* the homepage in their language. You could use a cookie, and redirect from the basic homepage based on that. Personally I avoid depending on cookies where possible, I didn't want to have duplicated directory structures, and I didn't want an added param on every request, so I used multiple *subdomains*, one per supported locale. They all mapped to the same IP, same application -- but in the web application I could check the requested URL and set the locale (and build the page) correctly using that. There were links on the top of the homepage to switch languages -- which would just flip to the proper subdomain. (Important note -- this complicates getting a cert for SSL, since that's tied to the domain... keep that in mind).

      Once you know what language you're using, build the page... this will probably involve getting data out of the database and displaying some of it.

      First, make sure your tables support whatever character set the languages will need. Then make your data design carefully. You need to make sure that any data in the database that will show up onscreen: product descriptions, category names, and ALSO prices (you probably have to give prices in various currencies, right?).

      Building the page -- you'll need more PHP-specific advice here, but the idea is that you need to get text and possibly images that are language-specific for each page. The general choices are:
      * Use a single PHP file for the content (e.g., a form for registration info), and get the text displayed from locale-specific files (so for the "name" label over that field, you'd grab the proper translation).
      * Maintain a separate PHP file for the content in each language, plug the proper one into the template.

      The first option is better if your content is mostly short bits of text -- but if there are larger chunks of text it gets hard to read (and if the whole page is text -- like a privacy policy page, etc. -- the second option may make more sense). Personally, I supported both options.

      What else? Don't forget that formatting of currency, numbers, dates, and times will vary by locale. Don't forget to review any Flash animations, dropdown menus, popup calendars, etc.. these will need to support changes based on locale. Organize your resources carefully, so that a simple substitution in the path will get you the right image, content file, etc. (e.g., images/fr_CA/whatever.gif).

      HTH.
      [ Parent ]
  • It is just me? (Score:2, Insightful)

    I can't stand that abbreviation, i18n. I mean who thought that would be a good abbreviation? It bears no resemblence to the original word. I think we can do better.
    • Re:It is just me? by Anonymous Coward (Score:1) Thursday June 23 2005, @02:14PM
    • Re:It is just me? by reidbold (Score:1) Thursday June 23 2005, @02:56PM
    • It is just you (Score:4, Insightful)

      by bluGill (862) on Thursday June 23 2005, @03:27PM (#12893531)

      The problem is you speak English. There is a good chance that you speak no other language. Since nearly everything is written in English first these days, you don't care about these issues.

      Many of those who care about i18n do not speak English at all! To these people even spelling the word out gives no help. In fact it is less helpful because they have to learn this large symbol. (There is no reason to assume they even know the Latin alphabit, so they will not think to learn each letter separately)

      Of those who speak English, many do not speak it fluently. Often they speak English as a first year student ("hello, my name is"), and they know how to look words up in their English-whatever dictionary.

      Of course English is the dominate second language in the world. There are plenty of people who speak English fluently as a second language. They often have trouble with the creative spelling English came up with. Words with 20 letters are hard for anyone to spell, so it would be no surprise if they have trouble spelling it.

      The goal is one symbol that is easy for everyone to recognize. No matter what language the page is written in, if you see "i18n", you know you are in a location where people are interested in translation. This is often enough for some educated clicking to find the same information in your language.

      i18n may not be a good abbreviation. However can you come up with a way to represent the concept to all 6+billion people on earth?

      [ Parent ]
      • Re:It is just you by stinerman (Score:2) Thursday June 23 2005, @03:48PM
      • Re:It is just you by Captain Nitpick (Score:1) Thursday June 23 2005, @07:47PM
      • Re:It is just you (Score:4, Interesting)

        by pla (258480) on Friday June 24 2005, @08:14AM (#12899691)
        (Last Journal: Monday April 03 2006, @07:23PM)
        Of course English is the dominate second language in the world.

        In IT, English holds the majority by far. And Spanish doesn't even come in second - You have Japanese and German as distant seconds, with Hebrew and French as dark-horse thirds.

        Attempts at internationalization simply hinder the adoption of English as the next ubiquitous academic language. Much like Greek and Latin during the Roman empire - The rabble may all speak Spanish, but those who want to appear educated speak English. Of course, Latin later went on to hold the same place, so perhaps some day Spanish will function as the language of the academic elite.

        Personally, I don't have great hope of us not blowing up the planet before then. So I code with English as my target language. Speak it, or don't use my programs, doesn't much matter to me


        Many of those who care about i18n do not speak English at all!

        I don't think that needs an exclamation mark - It doesn't come as a particular surprise to anyone. If you speak English, you don't have the least interest in "internationalization", which basically means "Make it accessible to people who don't speak English".


        And I don't write this as a xenophobic rant... I regularly use programs written by Japanese coders, and a few in German. And do I sit around complaining about how those coders, who already have given me something I find useful, should do extra work unrelated to the purpose of the program to make those programs more friendly to me? No. I recognized my inability to read the menus and such as a shortcoming in myself, and made the effort to learn enough Japanese and German (albeit very little) to navigate those programs.

        Or to put that another way - If Bill Gates only spoke Italian, a LOT more people would have learned at least a basic proficiency in it by now.
        [ Parent ]
      • Re:It is just you by thesixthreplicant (Score:1) Friday June 24 2005, @08:27AM
      • 1 reply beneath your current threshold.
    • Re:It is just me? by gstoddart (Score:2) Thursday June 23 2005, @03:41PM
    • Not just you - but mostly by Roadkills-R-Us (Score:2) Thursday June 23 2005, @05:04PM
    • It's a pun! by Anonymous Brave Guy (Score:2) Friday June 24 2005, @01:12PM
    • 1 reply beneath your current threshold.
  • by pyrrhonist (701154) on Thursday June 23 2005, @01:42PM (#12892446)
    How Are You Accomplishing Your i18n?

    By p09g.

  • Have your looked at PEAR? (Score:5, Informative)

    by 33degrees (683256) <33degrees.gmail@com> on Thursday June 23 2005, @01:50PM (#12892542)
    I haven't tried any of them, but PEAR has a number of packages [php.net] for dealing with internationalization. You might want to try looking there for insight.
  • Easy way, using SQL (Score:3, Informative)

    by jd (1658) <imipak AT yahoo DOT com> on Thursday June 23 2005, @01:52PM (#12892563)
    (http://slashdot.org/ | Last Journal: Saturday November 03, @04:58AM)
    Simply define a strings table with two key fields. The first key defines the string ID, the second defines the language ID. The sole attribute would then be the string itself.


    Adding a new language then just becomes a case of adding a new language ID to the system, and adding a new string becomes adding a string ID.


    Any place that you want to generate an output string, simply insert a token which represents the string ID. Your translation code scans for the tokens, gets the current language from the environment, and then searches your strings table for the substitution string.


    (For those who remember the Commodore PET computer, this is very similar to how it worked. The Print command, for example, was stored internally as a "?" token. It substituted when displaying.)


    You do not need a table for the string IDs, an enumerated type would be sufficient to track what IDs are in use and what for. You WOULD want a table for the language, with the language ID as the key field (preferably as an enumerated type) and the font ID as the attribute. If you are not using fonts (eg: plain-text output) then again you can just use the enumerated type.


    Because you would NOT be encoding font data into the string (NEVER, EVER do that, by the way, as you're just padding the data with redundant information, and introducing extra complexity), you can replace the font at will, provided it conforms to the mapping standards for international character sets.

  • Too new? (Score:1)

    by hexghost (444585) on Thursday June 23 2005, @01:52PM (#12892564)
    (http://www.java.net/)
    Is the topic of i18n too new to garner any usable info?

    Uh, its been around for a decade at least. Maybe a google search would help you.
  • i18nHTML (Score:3, Informative)

    Well, I think you're looking for this [gnunet.org].
  • That's not just i18n. (Score:3, Insightful)

    by truedfx (802492) on Thursday June 23 2005, @02:02PM (#12892664)
    My team has recently been given the task of implementing internationalization (i18n [wikipedia.org]) in our MySQL databases (PHP-interfaced). Essentially, for every article X, we need it presented in any number of languages (once translated).
    Let's check that link, shall we?
    The distinction between internationalization and localization is subtle but important. Internationalization is the adaptation of products for potential use virtually everywhere, while localization is the addition of special features for use in a specific locale. Subjects unique to localization include:

    * Language translation,
  • Simple (Score:3, Funny)

    by metamatic (202216) on Thursday June 23 2005, @02:02PM (#12892673)
    (http://www.pobox.com/~meta/ | Last Journal: Sunday February 29 2004, @09:19AM)
    I shout loudly and tell the users to learn English.

    (I keed, I keeed...)
  • Surpise! (Score:3, Interesting)

    by fm6 (162816) on Thursday June 23 2005, @02:16PM (#12892794)
    (http://picknit.com/ | Last Journal: Saturday July 29 2006, @03:58PM)
    ...we were very surprised to find that there's not much organized information...
    You shouldn't be. Internationalization (I'm a good typist, so I can dispense with that mysterious "18") only applies to human-readable stuff. In other words, documentation. (Yes, captions on forms are documentation too!) Is there anything software people are less motivated to deal with than documentation?
  • UTF! (Score:3, Insightful)

    by EvilIdler (21087) on Thursday June 23 2005, @02:32PM (#12892965)
    (http://www.360voice.com/tag/evilidler)
    Definitely use UTF-8 for all your strings and XHTML documents.
    Make sure your preferred editors really are saving UTF-8.
  • by spoonyfork (23307) <spoonyforkNO@SPAMgmail.com> on Thursday June 23 2005, @02:46PM (#12893102)
    (Last Journal: Monday November 27 2006, @07:16PM)
    The i18l wiki [wikipedia.org] scope section calls out profanity and morality. This really caught my attention. There is no explanation of their inclusion in the wiki. Why are they listed separate from language translation? Could anyone explain if/how/why they are incorporating profanity and morality into their i18n plans?
  • Here's a link for Rails (Score:1, Informative)

    by Anonymous Coward on Thursday June 23 2005, @03:00PM (#12893251)
    I found the following Rails article quite helpful:

    http://manuals.rubyonrails.com/read/chapter/82 [rubyonrails.com]

    In particular it links to the following:

    http://www.quepublishing.com/articles/printerfrien dly.asp?p=328641&rl=1 [quepublishing.com]

    Which is a very good discussion of characters sets in MySQL. I didn't realize it was so thorough. For instance you can have different character sets on tables, connections, and the server itself. Finally, it seems MySQL got something right. :-)
  • by jpkunst (612360) on Thursday June 23 2005, @03:04PM (#12893290)
    (http://joskunst.net/)

    I created a multilingual user interface for a moderately complicated web application with a small number of users like this:

    create an include directory 'lang' with language files for every language needed. In my case, two 'en.inc.php' for English and 'nl.inc.php' for Dutch. These files contain the strings for the interface in an associative array. Example:

    'nl.inc.php' contains:
    $l10n['ja'] = 'ja';
    'en.inc.php' contains:
    $l10n['ja'] = 'yes';
    I use a session to store the desired language:
    if (isset($_REQUEST['lang'])) {
    $available_languages = array('nl', 'en');
    if (in_array($_REQUEST['lang'], $available_languages)) {
    $_SESSION['lang'] = $_REQUEST['lang'];
    } else {
    $_SESSION['lang'] = 'nl';
    }
    require('lang/' . $_SESSION['lang'] . '.inc.php');
    }

    And then I just use the $l10n array for the strings in the user interface instead of hardcoded strings.

    echo $l10n['ja'];

    Which gives 'yes' if the session language is English and 'ja' if the session language is Dutch.

    A simple technique but it seems to work good enough.

    JP

  • It's a proportionality thing.. Often, the difficulty of programming i18n is less dramatic than the problem of actually generating all the different language sets.. Often such management means an advanced GUI (maybe not advanced, but certainly more than just raw field entries for a DB-backed widget).

    i18n is generally token language-set in a 1:n relationship.. Which maps nicely to table layouts, thus I don't see any need to create i18n support in the DB itself.

    If you want some degree of abstraction, java provides the ResourceBundle for which you can easily write your own DB-backed loaders. You instantiate your bundle, then pass it around to whatever device needs to render the actual text.

    There is lots of i18n support in the ASP/JSP environment (I assume in PHP as well). jstl, struts, webwork have nice end-to-end support for i18n (error messages accepting tokens instead of raw text, etc).

    For manipulation of static sets of text, there are generally plugins for your editors which allow you to manage a suite of bundleName_locale.properties with color highlighting, missing-term warnings, etc. I personally use the properties plugin for idea in the java environment.

    Anymore, you should conciously be evaluating if anything is ever being displayed to the end-user, and organizing that material into i18n bundles of some sort. Standardizing on whatever your platform natively supports is critical because you can leverage the tonns of tools that are here and are bound to come.
  • Smarty + preparse plugin (Score:4, Informative)

    by DamienMcKenna (181101) <damien@mc-k[ ]a.com ['enn' in gap]> on Thursday June 23 2005, @03:23PM (#12893470)
    I did this in 2003 for a CMS+ecommerse system I did for a company. You had Smarty [php.net] templates which had things like {productstr1} in them. The text strings were referenced by language and string ID, and if the string didn't have a specific version for your language it defaulted to English. This string was loaded from the database in a preparse plugin and was cached in a per-language directory. It worked ok, a bit kludgy but sufficient to get the job done.

    Damien
  • The database tier (Score:2)

    by chiph (523845) on Thursday June 23 2005, @04:17PM (#12894071)
    From a database perspective, there's two basic ways to do this. Assuming you need to present an I18N version of a Widget table, you can:

    1. Define Widget and WidgetText, with all the I18N material moved to WidgetText. WidgetText is keyed on the Id from Widget and a Culture identifier. Every time you need a Widget, you JOIN to WidgetText based on the Id from Widget and the Culture identifier of the requesting user.

    2. Add a Culture identifier column to your Widget table, and use that in your WHERE clause. Leaving it off means you'll get multiple rows back for a request to fetch a Widget.

    At my last job we took approach #1, and it worked well enough. It's main advantage (for us) was it made reporting easier (yeah, it seems like it wouldn't, but it did for various arcane reasons)

    In both cases you need to make sure you're using the NCHAR, NVARCHAR, and NTEXT Unicode variations of string column datatypes. All literals used in your SQL must have the "N" prefix to indicate Unicode data. You need to also watch out for the collation sequence defined in your database if the order of rows returned is important (and it usually is!). And make sure that you have the concept down of how storing DateTime values is entirely different from the display of DateTimes.

    Last time I looked at it, MySQL was sortof weak on a number of these points. Sybase SQL Anywhere (or whatever it's called this week) was pretty good, as well as the usual suspects: SQLServer, DB2, and Oracle. I don't know about PostgreSQL - haven't used it.

    You'll want to code up a vertical slice of your application to make sure all your chosen tools & components can handle I18N.

    Chip H.
  • Easy (Score:1)

    by floop (11798) * on Thursday June 23 2005, @04:55PM (#12894646)
    (http://www.expedia.com/)
    ./configure --without-nls
  • PHP? MySQL?? (Score:2)

    by deepestblue (206649) <slashdot.ambarish@ksharanam@net> on Thursday June 23 2005, @04:57PM (#12894661)
    Regarding PHP, http://www.joelonsoftware.com/items/2003/10/10.htm l [joelonsoftware.com] is instructive. Yes, I did confirm from the PHP website that things aren't too different now.

    MySQL? The less said, the better.
  • gettext (Score:2)

    by Ruis (21357) on Thursday June 23 2005, @05:55PM (#12895342)
    If you want to use gettext with php, I wrote a very simple howto on the subject. http://ruistech.com/gettext/ [ruistech.com]
    • Re:gettext by khanyisa (Score:1) Friday June 24 2005, @01:16AM
  • by slopedome (864529) on Thursday June 23 2005, @05:56PM (#12895349)
    You may need to start by converting your iso-8859-1 or other European ASCII to UTF-8 or another sensible Unicode charset. Some of our MySQL data was in the dreaded windows-1252 encoding, and I had to convert it to UTF. I downloaded the Convert Charset class (found via http://phpclasses.org/ [phpclasses.org] from Mikoaj Jdrzejak [republika.pl], and with that I discovered I could basically convert anything I wanted from whatever charset to whichever charset I like. Wrote a couple scripts, and that was that.
  • Why? (Score:1, Troll)

    by nurb432 (527695) on Thursday June 23 2005, @07:59PM (#12896358)
    (http://slashdot.org/~nurb432/ | Last Journal: Friday August 27 2004, @03:24PM)
    Those stupid langauge dont count, so why support them?

    If you cant speak/read English, then screw you.

    Hell, if you arent an American, screw you. Even better.

    Ya, mod me down. I dont care. Ill be the one laughing when your job is outsourced. You people cant hide from the truth forever.

  • phpBB (Score:1)

    by xluap (652530) on Thursday June 23 2005, @08:59PM (#12896756)
    The open source forum phpBB uses I18n. You can study it's source as an example how this can be done in php.

    www.phpbb.com
  • Gettext and separate version. (Score:3, Insightful)

    by Bitsy Boffin (110334) on Thursday June 23 2005, @09:31PM (#12896950)
    (http://www.gogo.co.nz/)
    Use gettext for general string i18n & l10n. Gettext is the defacto standard, it works, it's reasonably efficient, and there are many tools to support "unskilled" localisers to do the translating for you.

    For large or potentially dynamic text l10n (eg entire content of pages, descriptions of products in a database, etc etc..) then you need to have 1 version for each language you are supporting (you COULD do it through gettext but it would be rather tedious). How you do that is of course 100% dependant on your application.

    • 1 reply beneath your current threshold.
  • might I suggest you browse various PHP OSS projects. Most of the biggest most popular packages have language selections. You're bound to find some good examples on how to handle i18n.
  • by agir (176190) on Friday June 24 2005, @03:47PM (#12904468)

    As a number of people have mentioned, Internationalization and localization can be an incredibly complex process.

    Since you are working with an existing system, you don't have the option of designing in I18N support from the very beginning.

    Get a good book.

    I recommend "XML Internationalization and Localization" by Yves Savourel, and "Beyond Borders web globalization strategies" by John Yunker. Both the authors have been in the I18N business a long time. They know what they are talking about.

    Choose your tools wisely.

    Use MySQL 4.1 (or newer) --

    Since MySQL 4.1, you have the option of choosing which character set to use on a per DB, per table, or per field basis. The simplest solution is to just make the entire DB use the UTF-8 character set (This may not be appropriate for reasons of optimization or other reasons).

    Learn about Unicode/UTF-8. (Others have provided links)

    Store your localized data in UTF-8. Using a single character set makes life much easier.

    Use a fairly recent version of PHP --

    PHP 4.1.1 (or newer) comes bundled with GNU Gettext.

    GNU gettext

    [gnu.org] http://www.gnu.org/software/gettext/ [gnu.org] You probably don't need to download it, since it should be included with your version of PHP. Just enable it in the php.ini, or compile it in from source.

    GNU Gettext has been around for a number of years. It's fairly efficient, well maintained and has a larger user base. It basically makes use of mapping a reference ID and a language-locale to a string of text. It replaces the ID with the appropriate text in your template to create a finished document. Text for different language-locales are stored in separate files called PO files.

    You will also want a PO file editor.

    Here are a couple of articles on GNU Gettext

    http://www.phpdig.net/ref/rn26.html [phpdig.net]
    http://www.onlamp.com/pub/a/php/2002/06/13/php.htm l [onlamp.com]
    http://www.uberdose.com/php/php-and-gettext-for-i1 8n/ [uberdose.com]

    If you are going to be using professional translators, you may want to consider XLIFF as a document exchange format. There are XLIFF to PO converters available.

    You may be considering XML (XHTML, XSLT and XLIFF) for Internationalization. The PHP solution, using Sablatron, is not yet fully-baked. I would avoid it for a production system. It shows promise for the future. Plus, XLIFF is not recommended as a storage format. You'll probably find some performance issues if you try to use it as a direct data store.

    Use templates, if at all possible.

    You may not be able to use the same template for all language-locales, but they should work for most cases. If you have a BDI language, for example Arabic or Hebrew, would likely need a separate template.

    Localize your CSS stylesheets.

    You may have locale specific layout and formatting information in your stylesheets.

    From a design point of view, consider using a combination of a Front Controller pattern to switch languages and a Page Controller pattern to apply the templates.

    Where are you storing the article data? Is it in the MySQL DB, or is it in static files that are referenced by the DB? Focus most of your efforts on the part that is most critical, MySQL if most of the data is in the DB, or PHP if most of the data is static. But remember, you are going to have to internationalize both parts of your system.

    Don't forget, text from many other languages takes up more space than english to say the same thing. Sometimes 30-50% more space. This can significantly impact layout in heading sections, column widths, a

  • by greggman (102198) on Saturday June 25 2005, @12:14AM (#12907499)
    (http://greggman.com/)
    First of all read this article. Yes, it's from perl not php but it's an awesome introduction to some of the problems you might have

    http://perl.active-venture.com/lib/Locale/Maketext /TPJ13.html [active-venture.com]

  • by CyricZ (887944) on Thursday June 23 2005, @01:55PM (#12892594)
    Indian companies are often very qualified for doing this sort of work. Considering the pervasiveness of non-English and English in India, they have become experts at including support for numerous languages simultaneously, even those written in very different scripts.
    [ Parent ]
  • Re:Too new? (Score:2)

    by cicadia (231571) on Thursday June 23 2005, @04:29PM (#12894272)
    This also implies that PHP has no native support of Unicode

    And, for that matter, neither does C, or C++, or assembler. We can conclude from this that Unicode support is not possible, except perhaps in Java or Python.

    The grandparent post was entirely correct to point out that this is not a new problem. People have been doing multibyte characters in all sorts of languages for a long time. I was even doing i18n in PHP in 1999.

    Not having 'native support' for Unicode doesn't mean that you can't use Unicode strings. (They're composed of bytes, you know). At most, it means you can't get useful data from the length() function, and things like toupper() and tolower() may not do what you expect. You can still store them and retrieve them, display them to the user. Programmers have been doing this sort of thing for a long time, without 'native' support from their language.

    If you know absolutely nothing about a topic, please don't post

    Good advice.

    [ Parent ]
    • Re:Too new? by cicadia (Score:2) Sunday June 26 2005, @07:24PM
    • 2 replies beneath your current threshold.
  • 5 replies beneath your current threshold.