52
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'));