Internationalization with SimpleXML?

Jim Plush once published an article about externalized PHP strings performance for Internationalization and conclude SQLite is a great choice. He also said SimpleXML is the fastest out of other 2 methods--store as PHP native array and parse ini. He was right about the parsing speed.

The structure of the PHP native array

$msg[$key] = $var;

The structure of the XML file

<strings>
<string key="$key">$var</string>
</strings>

I did a small experiment with the same structure.

SimpleXML is fast. It's faster than PHP parse a native array, and it allocates less memory in both PHP process and system than the native array.

Sadly, it is just not possible for SimpleXML to work for internationalization, certainly not in the structure described above.

SimpleXML returns object in a tree form, and the key to each node of the tree is the tag name, not the attribute.
In the above case, the attribute stores the key. The only way to extract the key is to loop though and find the key. Clearly it's not a good idea. Even with SimpleXML's native xpath

$tmp = $lang->xpath('//p[@key=\'thekey\'');

Find the right string is a much more CPU intensive job than the native PHP array.

What if the structure of XML look like this?

<strings>
<$key>$var</$key>
</strings>

Answer is still no. With different tag names, loading the a XML file (100000 tags) took a jaw dropping 37 seconds.

Guess XML can be ruled out from language translation storage for PHP.

Post new comment

The content of this field is kept private and will not be shown publicly.
If you have a Gravatar account, used to display your avatar. If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <img> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <span> <fn>
  • Lines and paragraphs break automatically.
  • Textual smileys will be replaced with graphical ones.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.

More information about formatting options

What is 11 + 28?
To combat spam, please solve the math question above.
Honey Pot that kill bots