XML

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.

A image template system I'm working on

I haven't post much these days because I'm busying working on a php project that was made to make image creation easy
For now, I is named Imarty.
It reads a XML file like this one:

<image w="10" h="10">
<frame>
	<layer w="10" h="10" x="0" y="0" opacity="100">
		<line x1="1" y1="1" x2="5" y2="5" color="#FF33FF" opacity="100" />
	</layer>
	<layer w="10" h="10" x="0" y="0" opacity="50">
		<line x1="5" y1="5" x2="10" y2="10" color="#FFFFFF" opacity="100" />
	</layer>
	</frame>
</image>

and turn it into a image.
Here is the output:
Imarty

The system is quite easy.
1. Read the XML
2. Break down into frames
3. Break down into layers
4. Do operation to layers, all operations are plug-ins(but it comes with a Imarty standard drawing Library)
5. Combine layers into individual frame(image)
6. Merge frames into gif animation (does not work now)

I have uploaded the first alpha release, it have many flaws, for instance:
1. There are no validation module present
2. The standard drawing library can only draw lines
3. Too many type casting
4. Plugin system can only use methods from the imarty standard drawing library

You can find it on my Imarty SVN here.
and I quite want to know..
is it possible for anyone to read my code though SVN in google code? or I have to assign members first?

Syndicate content
Honey Pot that kill bots