16.8.1 Problem
You want to display images that have text in them and have that text in
a locale-appropriate language.
16.8.2 Solution
Make an image directory for each locale
you want to support, as well as a global image directory for images that have no
locale-specific information in them. Create copies of each locale-specific image
in the appropriate locale-specific directory. Make sure that the images have the
same filename in the different directories. Instead of printing out image URLs
directly, use a wrapper function similar to the msg( ) function in Section
16.5 that prints out locale-specific text.
16.8.3 Discussion
The img( ) wrapper function
looks for a locale-specific version of an image first, then a global one. If
neither are present, it prints a message to the error log:
$image_base_path = '/usr/local/www/images';
$image_base_url = '/images';
function img($f) {
global $LANG;
global $image_base_path;
global $image_base_url;
if (is_readable("$image_base_path/$LANG/$f")) {
print "$image_base_url/$LANG/$f";
} elseif (is_readable("$image_base_path/global/$f")) {
print "$image_base_url/global/$f";
} else {
error_log("l10n error: LANG: $lang, image: '$f'");
}
}
This function needs to know both the path to the image file in
the filesystem ($image_base_path) and the path to the image from the
base URL of your site (/images). It uses the
first to test if the file can be read and the second to construct an appropriate
URL for the image.
A localized image must have the same filename in each
localization directory. For example, an image that says "New!" on a yellow
starburst should be called new.gif in both the
images/en_US directory and the images/es_US directory, even though the file images/es_US/new.gif is a picture of a yellow starburst
with "¡Nuevo!" on it.
Don't forget that the alt text you display in your
image tags also needs to be localized. A complete localized
<img> tag looks like:
printf('<img src="%s" alt="%s">',img('cancel.png'),msg('Cancel'));
If the localized versions of a particular image have varied
dimensions, store image height and width in the message catalog as well:
printf('<img src="%s" alt="%s" height="%d" width="%d">',
img('cancel.png'),msg('Cancel'),
msg('img-cancel-height'),msg('img-cancel-width'));
The localized messages for img-cancel-height and
img-cancel-width are not text strings, but integers that describe the
dimensions of the cancel.png image in each
locale.