[sldev] Looking at I18N formatting standards

Steve Linden steve at lindenlab.com
Tue Feb 17 11:48:33 PST 2009


The I18N dev team is going to be tackling date, time, number, and 
currency localization issues in the next couple of quarters. We are 
looking at existing standards for replacing text inside a message and 
want to cover as many as possible before making a decision. Some 
possibilities that we are looking at include ICU 
<http://www.icu-project.org/> and XSLT. If anyone on this list is 
familiar with any other good options, please reply to this thread.

As an example of what I mean, currently a string substitution in the 
Viewer might look like this:

std::string bar(const LLSD& sdargs)
{
    LLUIString foo = getString("bar"); // bar = "At [TIME] on [DATE], 
there was [EVENT] on planet [PLANET]";
    foo.setArg("[TIME]", sdargs["time"].asString());
    foo.setArg("[DATE]", sdargs["date"].asString(0));
    foo.setArg("[EVENT]", sdargs["event"].asString());
    return foo.getString();
}

The equivalent in ICU looks like this:

    UErrorCode err = U_ZERO_ERROR;
    Formattable arguments[] = {
       (int32_t)7,
       Formattable(Calendar.getNow(), Formattable::kIsDate),
       "a disturbance in the Force"
    };

    UnicodeString result;
    result = MessageFormat::format(
       "At {1,time} on {1,date}, there was {2} on planet{0,number,integer}.",
       arguments,
       3,
       result,
       err);

I am not particularly fond of indexed substitutions, I prefer name/value 
pairs, because it gives the translator a little more context, i.e. it is 
easier for a translator to look at "At [TIME] on [DATE], there was 
[EVENT] on planet [PLANET]" then "At {1,time} on {1,date}, there was {2} 
on planet{0,number,integer}."

Our current compromise proposal would look something like this: 

std::string bar(const LLSD& sdargs)
{
    LLUIString foo = getString("bar"); // bar = "At [DATE,time] on 
[DATE,date], there was [EVENT] on planet [PLANET,integer]";
    foo.setLLSDArgs(sdargs);
    return foo.getString();
}

Note, the code writing part of this is easy. There are plenty of 
time/date/number formatting libraries out there we could use for the 
time/date/number/currency -> localized string conversion. I just don't 
want to invent a string substitution standard if there is something 
useful and widely used out there that won't make the translators' job 
more difficult.

Thanks,
-Steve Linden


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.secondlife.com/pipermail/sldev/attachments/20090217/be535fd7/attachment.htm


More information about the SLDev mailing list