Je crée un site qui sera traduit en x langues.Affectation de la chaîne Gettext au membre de la classe
Toutes les chaînes doivent être localisées.
Il m'arrive de devoir afficher un nom de langue, un nom de pays ou d'autres informations qui ont été extraites d'une base de données. Les données traitées de cette manière seront rarement modifiées - comme ci-dessus je parle des noms de langue, des pays, etc.
Dans cet exemple, j'utilise le tableau qui contient les langues dans lesquelles l'interface utilisateur du site a été traduit. Pour permettre la traduction des noms (utilisé pour le texte du titre lorsque le drapeau/lien « changer la langue » est plané), j'ai un tableau comme *:
Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Je les utilise pour obtenir la chaîne de nom pertinent pour une donnée la langue.
Actuellement, je suis sur un tableau global:
$global_langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
Utilisation:
global $global_langNames;
echo $global_langNames[$code]; // $code = 'zh_CN'
sortie (locale = en_GB):
Chinois simplifié
Ou tput (locale = zh_CN):
简体 中文
Je préférerais déclarer (et d'autres) des tableaux constants en tant que membres privés de la classe, mais il semble PHP ne veut pas:
class constants_lang{
private static $langNames = Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
static function getLangName($code){
return self::$langNames($code);
}
}
Résultats dans:
Parse error: syntax error, unexpected '(', expecting ')' in /site/http/includes/classes/constants/lang.php on line 20
Dois-je pendre ma tête basse et aller ba ck au tableau global, ou y a-t-il une autre meilleure façon pour moi d'avoir un tableau 'constant' à utiliser de cette manière?
* Les clés du tableau sont à partir de la table de base de données des codes linguistiques de stockage et si nous avons une traduction de l'interface utilisateur:
code ui translation
zh_CN 1
en_GB 1
zh_TW 0
....
Solution
class constants{
private $langNamesFromCode;
function __construct()
{
$this->langNamesFromCode = $this->initLangNamesFromCode();
}
/* INIT */
private static function initLangNamesFromCode()
{
return Array("zh_CN" => _("Chinese - Simplified"), "en_GB" => _("English"));
}
/* GETTERS */
public static function getLangNameFromCode($code)
{
if(self::isStatic()){
$langNamesFromCode = self::initLangNamesFromCode();
return $langNamesFromCode[$code];
}
else{
return $this->langNamesFromCode[$code];
}
}
/* UTILITY */
private static function isStatic()
{
return !(isset($this) && get_class($this) == __CLASS__);
}
}
Voir [cette question] [1] pour une alternative. YMMV. [1]: http://stackoverflow.com/questions/693691/php-how-to-initialize-static-variables – johndodo