Page 1 of 1

A Template for Multilingual UDT's (User Defined Tags)

Posted: Wed Sep 30, 2009 11:03 am
by Russ
This is now in the Forge
http://dev.cmsmadesimple.org/projects/multilingualudt

This is the sister post to the "A Template for Multilingual Tags/Plugins" one.
http://forum.cmsmadesimple.org/index.php/topic,37799.0.html

This is a proposed template for multilingual UDT's or User Defined Tags.
Just create a UDT called:
'sfi_multilingual_udt_template'

and paste the code below into it.

Code: Select all

# sfi_multilingual_udt_template
# shoesforindustry.net
# Russ Baldwin
# This is a proposed skeleton template for a multilingual UDT.
# Version 0.1
# 
# Use on your page with:
# {sfi_multilingual_udt_template lang='en_US'} 
# setting the display language as appropriate
#
# If you do not add the 'lang' parameter:
# {sfi_multilingual_udt_template}
# Then the UDT will use the language set in Admin:
# 'Site Admin / Global Settings / Default language'
# If no language is set there, then the Tag uses the default (en_US)
#
# If the language specified is not in the UDT, then the UDT uses the default (en_US)
#
#
# Get the display language parameter, if any, else use the database default (case select statement below)
if (isset ($params['lang'])) {
//  If there is a language parameter, but it is not in the UDT list of languages, then use the default. If this is not set then use a default
$setLanguage = $params['lang'];
}
else { 
	//  If no language parameter is specified then try and use display / frontendlang from database with 
	global $gCms;
	$db = &$gCms->GetDb();
	$query ="SELECT ".cms_db_prefix()."siteprefs.sitepref_value FROM ".cms_db_prefix()."siteprefs WHERE sitepref_name = 'frontendlang'";
	$frontendLang= $db->GetOne($query);
		if (isset($frontendLang)) {
                        //OK lang is set in the database so use this for display language
			$setLanguage =$frontendLang;
			} else {
                        //NO lang is set in the database so use this a default (en_US)
			$frontendLang = "en_US";
			$setLanguage =$frontendLang;
			}
		
}
// End check for language parameters

// You can turn on a debug on which shows the set language - uncomment the line below
//$UDTDebug = "<h3>DEBUG</h3><p>Display language = ". $setLanguage. "</p>";

//Display strings for UDT (main) alter these as required by your program/language
switch($setLanguage)
// Add new case statements as desired for more languages
{
case "de_DE": //All strings used in UDT for text displayed on a site in German / Deutsch
$returnString="Dies ist die zurückgegebene Zeichenfolge aus dem sfi_multilingual_udt_template";
break;

case "es_ES": //All strings used in UDT for text displayed on a site in Spanish / Español
$returnString="Esta es la cadena de regresar de la sfi_multilingual_udt_template";
break;

case "fr_FR": //All strings used in UDT for text displayed on a site in French / Français
$returnString="Il s'agit de la chaîne retournée par la sfi_multilingual_udt_template";
break;

case "nl_NL": //All strings used in UDT for text displayed on a site in Dutch /Nederlandse
$returnString="Dit is de geretourneerde string uit de sfi_multilingual_udt_template";
break;

default: //(en-US) All strings used in UDT for text displayed as default
$setLanguage="en_US";
$returnString="This is the returned string from the sfi_multilingual_udt_template";
break;
}

// Get your parameters for the UDT... if any...

//Your  main UDT code probably goes here... this is just returning a string in specified language
$returnString='<p class="myClass">'.$returnString.'</p>';

//And return DEBUG infromation if set
if ((isset ($UDTDebug))) {
$returnString.=$UDTDebug;
}
#End of your code

#Return localised UDT information to your page
echo $returnString;
Use on your page with:
{sfi_multilingual_udt_template lang='en_US'}
setting the display language as appropriate

If you do not add the 'lang' parameter e.g.:
{sfi_multilingual_udt_template}
Then the UDT will use the language set in Admin:
'Site Admin / Global Settings / Default language'
If no language is set there, then the Tag uses the default (en_US)
If the language specified is not in the UDT, then the UDT uses the default (en_US)

I've not tried this with the MLE version of CMSMS, I will if I get time, but you should be OK if you specify a language.
(I'm not sure if MLE relies on the same database fields.)


There are extensive comments in the code.
Let me know if I can improve things!
Also let me know what you think and could you / would you use it?

Also I'd like to apologise in advance about the tag translations, I used Google Translation for it so it could be absolute rubbish! Sorry.

Russ