Hi Norbert, We are implementing something similar in the Zend Framework (http://framework.zend.com/wiki/display/ZFPROP/Zend_Translate+-+Thomas+Weidner).
Is this in the direction of what you mean? Andi > -----Original Message----- > From: Norbert Lindenberg [mailto:[EMAIL PROTECTED] > Sent: Thursday, December 21, 2006 9:18 AM > To: php-i18n@lists.php.net > Cc: Norbert Lindenberg > Subject: [PHP-I18N] Re: ICU ResourceBundles for ext/unicode > > Hi all, > > I'm new to this list, so let me introduce myself: I'm one of > the internationalization architects at Yahoo, and have > recently started looking into PHP internationalization. I > previously worked on Java internationalization at Sun for a few years. > > Resource bundles have helped make internationalization of > Java applications easy and popular, so I'd like to see a > similar capability in PHP. I know gettext is available, but > it seems a bit difficult to understand and uses locale > specific encodings instead of Unicode. > > The ICU style of resource bundles is Unicode based, but also > seems more complicated than desirable for PHP. It's designed > for a statically typed environment and requires compilation, > neither of which fit in well with PHP. > > I'd rather start with Java properties files, the simplest and > most widely used form of Java resource files. I'd adapt them > to PHP 6 by switching their encoding to UTF-8, adopting > heredocs, and simplifying their syntax. I'd drop the > secondary fallback mechanism, in which resource bundles can > inherit individual resources from other bundles. > This is an optimization to reduce the size of bundles at the > expense of runtime overhead and additional work in creating > the bundles. The additional step of finding common resources > and moving them to shared bundles is rarely made in normal > localization processes, and the space savings don't matter > much for PHP, where bundles remain on the server. Dropping > the secondary fallback also means that we can simplify the > resource bundle to just an array. > > Below is my draft specification for a resource bundle > mechanism for PHP. For comparison, the specs for the > corresponding functionality in Java and ICU4C are: > - ICU resource bundle specification: > http://icu.sourceforge.net/apiref/icu4c/ures_8h.html > - ICU resource file specification: > http://dev.icu-project.org/cgi-bin/viewcvs.cgi/icuhtml/design/ > bnf_rb.txt?view=co > - Java resource bundle specification: > > http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.html > - Java properties file specification: > http://java.sun.com/javase/6/docs/api/java/util/ > Properties.html#load(java.io.Reader) > > > API: > > array intl_get_resources(string base_name) > > Returns an array containing the key-value pairs obtained from > a resource file. The resource file is looked up for the > current locale using the lookup algorithm of section 3.4 of > RFC 4647, at each step generating the file name by > concatenating the given base name, the string "-", the > language tag of the current step, and the string ".pres". The > default file name used if no previous step was successful is > the concatenation of base name and ".pres". Once a file is > found, its contents are interpreted according to the resource > file format specified below, and an array is filled with its > key-value pairs. An entry with "#locale#" as its key and the > actual locale tag of the file found as its value is added to > the array, and the array is returned. The function may cache > its results, but must check at least once every 60 minutes > that the underlying resource files haven't changed. > > > Resource File Format > > - Files are encoded in UTF-8. The first line may be prefixed > with a BOM. > - Lines whose first non-whitespace character is "#" are > comment lines and are ignored. > - Lines that contain only whitespace characters and are not > part of a heredoc string are ignored. > - Key-value definitions come in two forms: > o The simple form has a key string, followed by > "=", followed by the value, all on one line. The tokens may > or may not be surrounded by whitespace characters. Leading > and trailing whitespace is trimmed from both key and value. > The value cannot start with "<<<"; for values starting with > this character sequence, use the heredoc form. > o The heredoc form starts with a key string, > followed by "=", followed by "<<<", followed by an > identifier, all on one line. > The tokens may or may not be surrounded by whitespace characters. > Leading and trailing whitespace is trimmed from both key and value. > The heredoc form ends with a termination line that contains > only the identifier, possibly followed by a semicolon. The > lines between these two lines, except comment lines, form the > heredoc string. The line break before the termination line is > removed, all other line breaks are preserved. > - Lines that are not comment lines, whitespace lines, or part > of a key-value definition are illegal. > - The following escape sequences are recognized in values: > o "\\" stands for "\" > o "\n" stands for the newline character, U+000A. > o "\t" stands for the horizontal tab character, U+0009. > o "\ " stands for the space character, U+0020. > This is only needed if the value of a key-value pair starts > or ends with a space character. > o "\#" stands for the number sign character, > U+0023. This is only needed if a line within a heredoc string > starts with this character. > - A sequence of "\" followed by a character not listed above > is illegal. A "\" immediately preceding the end of the file > is illegal. > - Only the characters horizontal tab, U+0009, and space, > U+0020, are considered whitespace. > > > With that, hello world becomes: > > <?php > $strings = intl_get_resources("strings"); > echo "$strings[hello]"; > ?> > > The strings.pres file contains: > hello = Hello, world! > and strings-ja.pres contains: > hello = こんにちは、皆さん。 > > What do you think? > > Regards, > Norbert > > -- > PHP Unicode & I18N Mailing List (http://www.php.net/) To > unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Unicode & I18N Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php