2003-05-02 12:33:06 +02:00
|
|
|
<?php
|
2010-04-19 11:34:50 +02:00
|
|
|
/* Copyright (C) 2001 Eric Seigne <erics@rycks.com>
|
|
|
|
|
* Copyright (C) 2004-2010 Destailleur Laurent <eldy@users.sourceforge.net>
|
|
|
|
|
* Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr>
|
2003-05-02 12:33:06 +02:00
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
2010-04-19 11:34:50 +02:00
|
|
|
*/
|
2003-05-02 12:33:06 +02:00
|
|
|
|
2005-01-02 17:57:37 +01:00
|
|
|
/**
|
2010-06-08 01:52:43 +02:00
|
|
|
* \file htdocs/core/class/translate.class.php
|
2010-11-22 10:18:53 +01:00
|
|
|
* \ingroup core
|
2008-10-09 19:29:32 +02:00
|
|
|
* \brief File for Tanslate class
|
2008-08-07 08:33:35 +02:00
|
|
|
* \author Eric Seigne
|
|
|
|
|
* \author Laurent Destailleur
|
|
|
|
|
* \version $Id$
|
|
|
|
|
*/
|
2004-08-15 20:09:30 +02:00
|
|
|
|
|
|
|
|
|
2008-01-21 03:19:25 +01:00
|
|
|
/**
|
2008-08-07 08:33:35 +02:00
|
|
|
* \class Translate
|
|
|
|
|
* \brief Class to manage translations
|
|
|
|
|
*/
|
2004-08-15 20:09:30 +02:00
|
|
|
class Translate {
|
2004-07-25 19:43:23 +02:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
var $dir; // Directories that contains /langs subdirectory
|
2008-03-31 17:17:39 +02:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
var $defaultlang; // Langue courante en vigueur de l'utilisateur
|
2009-08-11 14:28:30 +02:00
|
|
|
var $direction = 'ltr'; // Left to right or Right to left
|
2005-02-06 19:41:45 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
var $tab_translate=array(); // Tableau des traductions
|
2009-12-16 19:57:51 +01:00
|
|
|
var $tab_loaded=array(); // Array to store result after loading each language file
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
var $cache_labels=array(); // Cache for labels
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
var $charset_inputfile=array(); // To store charset encoding used for language
|
2009-02-14 01:36:49 +01:00
|
|
|
var $charset_output='UTF-8'; // Codage used by "trans" method outputs
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2003-05-02 12:33:06 +02:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
/**
|
2011-01-30 14:35:00 +01:00
|
|
|
* Constructor
|
|
|
|
|
* @param dir Force directory that contains /langs subdirectory (value is sometine '..' like into install/* pages
|
|
|
|
|
* or support/* pages).
|
|
|
|
|
* @param conf Object with Dolibarr configuration
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function Translate($dir = "",$conf)
|
|
|
|
|
{
|
2011-01-30 14:35:00 +01:00
|
|
|
if (! empty($conf->file->character_set_client)) $this->charset_output=$conf->file->character_set_client; // If charset output is forced
|
2008-12-07 20:19:32 +01:00
|
|
|
if ($dir) $this->dir=array($dir);
|
2009-05-08 03:23:33 +02:00
|
|
|
else $this->dir=$conf->file->dol_document_root;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2005-10-30 02:07:00 +01:00
|
|
|
|
|
|
|
|
|
2011-01-30 14:35:00 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
/**
|
2011-01-30 14:35:00 +01:00
|
|
|
* Set accessor for this->defaultlang
|
|
|
|
|
* @param srclang Language to use
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function setDefaultLang($srclang='fr_FR')
|
|
|
|
|
{
|
2011-01-30 14:35:00 +01:00
|
|
|
global $conf;
|
2011-03-08 16:14:42 +01:00
|
|
|
|
2009-09-28 04:53:19 +02:00
|
|
|
//dol_syslog("Translate::setDefaultLang srclang=".$srclang,LOG_DEBUG);
|
2009-05-11 18:26:54 +02:00
|
|
|
|
2011-01-30 14:35:00 +01:00
|
|
|
// If a module ask to force a priority on langs directories (to use its own lang files)
|
2011-03-08 16:14:42 +01:00
|
|
|
if (! empty($conf->global->MAIN_FORCELANGDIR))
|
2011-01-30 14:35:00 +01:00
|
|
|
{
|
|
|
|
|
$more=array();
|
|
|
|
|
foreach($conf->file->dol_document_root as $dir)
|
|
|
|
|
{
|
|
|
|
|
$newdir=$dir.$conf->global->MAIN_FORCELANGDIR;
|
|
|
|
|
if (! in_array($newdir,$this->dir)) $more[]=$newdir;
|
|
|
|
|
}
|
2011-03-08 16:14:42 +01:00
|
|
|
$this->dir=array_merge($more,$this->dir);
|
2011-01-30 14:35:00 +01:00
|
|
|
}
|
2011-03-08 16:14:42 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
$this->origlang=$srclang;
|
|
|
|
|
|
|
|
|
|
if (empty($srclang) || $srclang == 'auto')
|
|
|
|
|
{
|
|
|
|
|
$langpref=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
|
2009-10-21 16:02:14 +02:00
|
|
|
$langpref=preg_replace("/;([^,]*)/i","",$langpref);
|
|
|
|
|
$langpref=str_replace("-","_",$langpref);
|
2009-10-20 15:14:44 +02:00
|
|
|
$langlist=preg_split("/[;,]/",$langpref);
|
2009-08-12 19:40:47 +02:00
|
|
|
$codetouse=$langlist[0];
|
|
|
|
|
}
|
|
|
|
|
else $codetouse=$srclang;
|
2011-03-30 17:53:51 +02:00
|
|
|
|
2009-08-12 19:40:47 +02:00
|
|
|
// We redefine $srclang
|
2009-10-20 15:14:44 +02:00
|
|
|
$langpart=explode("_",$codetouse);
|
2010-02-21 09:53:42 +01:00
|
|
|
//print "Short before _ : ".$langpart[0].'/ Short after _ : '.$langpart[1].'<br>';
|
2011-03-30 17:52:27 +02:00
|
|
|
if (isset($langpart[1])) // If it's for a codetouse that is a long code xx_YY
|
2009-08-12 19:40:47 +02:00
|
|
|
{
|
2011-03-31 17:11:53 +02:00
|
|
|
// Array force long code from first part, even if long code is defined
|
|
|
|
|
$longforshort=array('ar'=>'ar_SA');
|
2009-08-12 19:40:47 +02:00
|
|
|
if (isset($longforshort[strtolower($langpart[0])])) $srclang=$longforshort[strtolower($langpart[0])];
|
|
|
|
|
else {
|
2009-05-11 18:26:54 +02:00
|
|
|
$srclang=strtolower($langpart[0])."_".strtoupper($langpart[1]);
|
|
|
|
|
$longforlong=array('no_nb'=>'nb_NO');
|
|
|
|
|
if (isset($longforlong[strtolower($srclang)])) $srclang=$longforlong[strtolower($srclang)];
|
|
|
|
|
}
|
2009-08-12 19:40:47 +02:00
|
|
|
}
|
2011-03-30 17:52:27 +02:00
|
|
|
else { // If it's for a codetouse that is a short code xx
|
2011-03-31 17:11:53 +02:00
|
|
|
// Array to convert short lang code into long code.
|
|
|
|
|
$longforshort=array('ar'=>'ar_SA', 'el'=>'el_GR', 'ca'=>'ca_ES', 'en'=>'en_US', 'nb'=>'nb_NO', 'no'=>'nb_NO');
|
2009-08-12 19:40:47 +02:00
|
|
|
if (isset($longforshort[strtolower($langpart[0])])) $srclang=$longforshort[strtolower($langpart[0])];
|
|
|
|
|
else $srclang=strtolower($langpart[0])."_".strtoupper($langpart[0]);
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->defaultlang=$srclang;
|
2009-08-12 19:40:47 +02:00
|
|
|
//print $this->defaultlang;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-01 13:41:32 +01:00
|
|
|
* Return active language code for current user
|
|
|
|
|
* It's an accessor for this->defaultlang
|
|
|
|
|
* @param mode 0=Long language code, 1=Short language code
|
|
|
|
|
* @return string Language code used (en_US, en_AU, fr_FR, ...)
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
2010-11-01 13:41:32 +01:00
|
|
|
function getDefaultLang($mode=0)
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-11-01 13:41:32 +01:00
|
|
|
if (empty($mode)) return $this->defaultlang;
|
|
|
|
|
else return substr($this->defaultlang,0,2);
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-22 10:18:53 +01:00
|
|
|
* Load translation key-value for a particular file, into a memory array.
|
|
|
|
|
* If data for file already loaded, do nothing.
|
|
|
|
|
* All data in translation array are stored in UTF-8 format.
|
|
|
|
|
* tab_loaded is completed with $domain key.
|
2011-05-25 15:27:07 +02:00
|
|
|
* Value for hash are: 1:Loaded from disk, 2:Not found, 3:Loaded from cache
|
2010-11-22 10:18:53 +01:00
|
|
|
* @param domain File name to load (.lang file). Use file@module if file is in a module directory.
|
|
|
|
|
* @param alt 0 (try xx_ZZ then 1), 1 (try xx_XX then 2), 2 (try en_US or fr_FR or es_ES)
|
|
|
|
|
* @param stopafterdirection Stop when the DIRECTION tag is found (optimize)
|
|
|
|
|
* @param forcelangdir To force a lang directory
|
|
|
|
|
* @return int <0 if KO, 0 if already loaded, >0 if OK
|
2008-03-31 17:17:39 +02:00
|
|
|
*/
|
2009-09-28 04:53:19 +02:00
|
|
|
function Load($domain,$alt=0,$stopafterdirection=0,$forcelangdir='')
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2009-06-10 21:51:00 +02:00
|
|
|
global $conf;
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2008-02-19 22:04:23 +01:00
|
|
|
// Check parameters
|
|
|
|
|
if (empty($domain))
|
|
|
|
|
{
|
2009-02-20 21:28:16 +01:00
|
|
|
dol_print_error('',"Translate::Load ErrorWrongParameters");
|
2009-02-02 19:33:44 +01:00
|
|
|
exit;
|
2008-02-19 22:04:23 +01:00
|
|
|
}
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2009-09-28 23:59:09 +02:00
|
|
|
//dol_syslog("Translate::Load Start domain=".$domain." alt=".$alt." forcelangdir=".$forcelangdir." this->defaultlang=".$this->defaultlang);
|
|
|
|
|
|
2010-04-19 11:45:53 +02:00
|
|
|
$newdomain = $domain;
|
2010-04-19 11:34:50 +02:00
|
|
|
$modulename = '';
|
2010-05-08 04:16:29 +02:00
|
|
|
|
2010-04-19 11:34:50 +02:00
|
|
|
// Search if module directory name is different of lang file name
|
|
|
|
|
if (preg_match('/^([^@]+)?@([^@]+)$/i',$domain,$regs))
|
|
|
|
|
{
|
|
|
|
|
$newdomain = (!empty($regs[1])?$regs[1]:$regs[2]);
|
|
|
|
|
$modulename = (!empty($regs[1])?$regs[2]:'');
|
|
|
|
|
}
|
2009-09-28 04:53:19 +02:00
|
|
|
|
2011-05-09 21:42:56 +02:00
|
|
|
// Check cache
|
2009-09-28 23:59:09 +02:00
|
|
|
if (! empty($this->tab_loaded[$newdomain])) // File already loaded for this domain
|
|
|
|
|
{
|
2011-05-09 21:42:56 +02:00
|
|
|
//dol_syslog("Translate::Load already loaded for newdomain=".$newdomain);
|
2009-09-28 23:59:09 +02:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-09 21:42:56 +02:00
|
|
|
$fileread=0;
|
2009-09-28 23:59:09 +02:00
|
|
|
$langofdir=(empty($forcelangdir)?$this->defaultlang:$forcelangdir);
|
|
|
|
|
|
|
|
|
|
// Redefine alt
|
2009-10-20 15:14:44 +02:00
|
|
|
$langarray=explode('_',$langofdir);
|
2009-09-28 23:59:09 +02:00
|
|
|
if ($alt < 1 && strtolower($langarray[0]) == strtolower($langarray[1])) $alt=1;
|
|
|
|
|
if ($alt < 2 && (strtolower($langofdir) == 'en_us' || strtolower($langofdir) == 'fr_fr' || strtolower($langofdir) == 'es_es')) $alt=2;
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2008-12-07 20:19:32 +01:00
|
|
|
foreach($this->dir as $searchdir)
|
|
|
|
|
{
|
2010-12-15 11:58:45 +01:00
|
|
|
// If $domain is "file@module" instead of "file" then we look for module lang file
|
|
|
|
|
// in htdocs/custom/modules/mymodule/langs/code_CODE/file.lang
|
|
|
|
|
// and in htdocs/mymodule/langs/code_CODE/file.lang for backward compatibility
|
2010-08-15 17:15:52 +02:00
|
|
|
// instead of file htdocs/langs/code_CODE/filelang
|
2010-04-19 11:34:50 +02:00
|
|
|
if (preg_match('/@/',$domain)) $searchdir = $searchdir."/".(!empty($modulename)?$modulename:$newdomain)."/langs";
|
2008-12-07 20:19:32 +01:00
|
|
|
else $searchdir=$searchdir."/langs";
|
2009-01-02 23:02:52 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
// Directory of translation files
|
2009-09-28 23:59:09 +02:00
|
|
|
$scandir = $searchdir."/".$langofdir;
|
|
|
|
|
$file_lang = $scandir . "/".$newdomain.".lang";
|
2009-12-16 19:57:51 +01:00
|
|
|
$file_lang_osencoded=dol_osencode($file_lang);
|
|
|
|
|
$filelangexists=is_file($file_lang_osencoded);
|
2009-01-02 23:02:52 +01:00
|
|
|
|
2009-09-28 23:59:09 +02:00
|
|
|
//dol_syslog('Translate::Load Try to read for alt='.$alt.' langofdir='.$langofdir.' file_lang='.$file_lang." => ".$filelangexists);
|
2009-01-02 23:02:52 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
if ($filelangexists)
|
|
|
|
|
{
|
2009-12-16 19:57:51 +01:00
|
|
|
$found=false;
|
2010-01-13 17:26:19 +01:00
|
|
|
|
2010-05-08 04:16:29 +02:00
|
|
|
// Enable cache of lang file in memory (not by default)
|
|
|
|
|
$usecachekey='';
|
|
|
|
|
// Using a memcached server
|
2010-11-13 21:59:06 +01:00
|
|
|
if (! empty($conf->memcached->enabled) && ! empty($conf->global->MEMCACHED_SERVER))
|
2010-05-08 04:16:29 +02:00
|
|
|
{
|
2010-05-08 16:18:27 +02:00
|
|
|
$usecachekey=$newdomain.'_'.$langofdir;
|
2010-05-08 04:16:29 +02:00
|
|
|
}
|
|
|
|
|
// Using cache with shmop. Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
|
|
|
|
|
else if (isset($conf->global->MAIN_OPTIMIZE_SPEED) && ($conf->global->MAIN_OPTIMIZE_SPEED & 0x02))
|
|
|
|
|
{
|
|
|
|
|
$usecachekey=$newdomain;
|
|
|
|
|
}
|
2010-01-13 17:26:19 +01:00
|
|
|
|
2010-06-11 02:41:17 +02:00
|
|
|
if ($usecachekey)
|
2008-01-20 17:05:50 +01:00
|
|
|
{
|
2009-12-16 19:57:51 +01:00
|
|
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
2010-05-08 04:16:29 +02:00
|
|
|
$tmparray=dol_getcache($usecachekey);
|
2009-12-16 19:57:51 +01:00
|
|
|
if (is_array($tmparray) && sizeof($tmparray))
|
2008-12-07 20:19:32 +01:00
|
|
|
{
|
2010-06-11 03:06:30 +02:00
|
|
|
$this->tab_translate=array_merge($tmparray,$this->tab_translate); // Already found values tab_translate overwrites duplicates
|
2009-12-16 22:42:42 +01:00
|
|
|
//print $newdomain."\n";
|
|
|
|
|
//var_dump($this->tab_translate);
|
2010-06-11 02:55:15 +02:00
|
|
|
if ($alt == 2) $fileread=1;
|
2010-05-08 17:02:04 +02:00
|
|
|
$found=true; // Found in dolibarr PHP cache
|
2008-12-07 20:19:32 +01:00
|
|
|
}
|
2008-01-20 17:05:50 +01:00
|
|
|
}
|
2009-12-16 19:57:51 +01:00
|
|
|
|
|
|
|
|
if (! $found)
|
2008-12-07 20:19:32 +01:00
|
|
|
{
|
2008-12-07 21:54:08 +01:00
|
|
|
if ($fp = @fopen($file_lang,"rt"))
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-05-08 04:16:29 +02:00
|
|
|
if ($usecachekey) $tabtranslatedomain=array(); // To save lang content in cache
|
2010-01-13 17:26:19 +01:00
|
|
|
|
2010-12-15 08:12:28 +01:00
|
|
|
while ($line = fgets($fp,4096)) // Ex: Need 225ms for all fgets on all lang file for Third party page. Same speed than file_get_contents
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-12-15 08:12:28 +01:00
|
|
|
if ($line[0] != "\n" && $line[0] != " " && $line[0] != "#")
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-12-15 08:12:28 +01:00
|
|
|
$tab=explode('=',$line,2);
|
2009-05-11 18:26:54 +02:00
|
|
|
$key=trim($tab[0]);
|
|
|
|
|
//print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>";
|
|
|
|
|
if (empty($this->tab_translate[$key]) && isset($tab[1]))
|
|
|
|
|
{
|
2009-10-21 20:14:00 +02:00
|
|
|
$value=trim(preg_replace('/\\n/',"\n",$tab[1]));
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2010-10-27 16:15:30 +02:00
|
|
|
if ($key == 'CHARSET') // This is to declare in which charset files are encoded
|
2008-10-20 04:18:54 +02:00
|
|
|
{
|
2009-09-28 23:59:09 +02:00
|
|
|
$this->charset_inputfile[$newdomain]=strtoupper($value);
|
|
|
|
|
//print 'File '.$file_lang.' is declared to have format '.$this->charset_inputfile[$newdomain].'<br>';
|
2008-10-20 04:18:54 +02:00
|
|
|
}
|
2010-10-27 16:15:30 +02:00
|
|
|
elseif ($key == 'DIRECTION') // This is to declare direction of language
|
2009-08-11 14:28:30 +02:00
|
|
|
{
|
2011-01-26 13:52:09 +01:00
|
|
|
if ($alt < 2 || empty($this->tab_translate[$key])) // We load direction only for primary files or if not yer load
|
2009-08-11 14:28:30 +02:00
|
|
|
{
|
2010-10-27 16:15:30 +02:00
|
|
|
$this->tab_translate[$key]=$value;
|
2011-03-08 16:14:42 +01:00
|
|
|
|
2011-01-26 13:06:49 +01:00
|
|
|
if ($stopafterdirection) break; // We do not save tab if we stop after DIRECTION
|
|
|
|
|
else if ($usecachekey) $tabtranslatedomain[$key]=$value;
|
2009-08-11 14:28:30 +02:00
|
|
|
}
|
|
|
|
|
}
|
2008-12-07 20:19:32 +01:00
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// On stocke toujours dans le tableau Tab en UTF-8
|
2009-09-28 23:59:09 +02:00
|
|
|
if (empty($this->charset_inputfile[$newdomain]) || $this->charset_inputfile[$newdomain] == 'ISO-8859-1') $value=utf8_encode($value);
|
|
|
|
|
|
|
|
|
|
//print 'XX'.$key;
|
|
|
|
|
$this->tab_translate[$key]=$value;
|
2011-03-08 16:14:42 +01:00
|
|
|
|
2010-05-08 04:16:29 +02:00
|
|
|
if ($usecachekey) $tabtranslatedomain[$key]=$value; // To save lang content in cache
|
2008-12-07 20:19:32 +01:00
|
|
|
}
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-12-07 20:19:32 +01:00
|
|
|
fclose($fp);
|
2009-12-16 19:57:51 +01:00
|
|
|
$fileread=1;
|
2010-01-13 17:26:19 +01:00
|
|
|
|
2010-06-11 02:41:17 +02:00
|
|
|
// To save lang content for usecachekey into cache
|
|
|
|
|
if ($usecachekey && sizeof($tabtranslatedomain))
|
2009-12-16 19:57:51 +01:00
|
|
|
{
|
|
|
|
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
2010-05-08 14:03:08 +02:00
|
|
|
$size=dol_setcache($usecachekey,$tabtranslatedomain);
|
2009-12-16 19:57:51 +01:00
|
|
|
}
|
2009-12-16 22:42:42 +01:00
|
|
|
//exit;
|
2008-12-07 20:19:32 +01:00
|
|
|
break; // Break loop on each root dir
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2008-12-07 20:19:32 +01:00
|
|
|
}
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2008-12-07 20:19:32 +01:00
|
|
|
}
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2010-06-11 02:41:17 +02:00
|
|
|
// Now we complete with next file
|
2009-09-28 23:59:09 +02:00
|
|
|
if ($alt == 0)
|
|
|
|
|
{
|
|
|
|
|
// This function MUST NOT contains call to syslog
|
|
|
|
|
//dol_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$newdomain.".lang file)", LOG_DEBUG);
|
|
|
|
|
$langofdir=strtolower($langarray[0]).'_'.strtoupper($langarray[0]);
|
|
|
|
|
$this->load($domain,$alt+1,$stopafterdirection,$langofdir);
|
|
|
|
|
}
|
|
|
|
|
|
2010-06-11 02:41:17 +02:00
|
|
|
// Now we complete with reference en_US/fr_FR/es_ES file
|
2009-09-28 23:59:09 +02:00
|
|
|
if ($alt == 1)
|
2009-06-14 18:25:23 +02:00
|
|
|
{
|
2009-09-28 23:59:09 +02:00
|
|
|
// This function MUST NOT contains call to syslog
|
|
|
|
|
//dol_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$newdomain.".lang file)", LOG_DEBUG);
|
|
|
|
|
$langofdir='en_US';
|
2009-10-24 08:10:00 +02:00
|
|
|
if (preg_match('/^fr/i',$langarray[0])) $langofdir='fr_FR';
|
|
|
|
|
if (preg_match('/^es/i',$langarray[0])) $langofdir='es_ES';
|
2009-09-28 23:59:09 +02:00
|
|
|
$this->load($domain,$alt+1,$stopafterdirection,$langofdir);
|
2009-06-14 18:25:23 +02:00
|
|
|
}
|
2009-06-10 21:51:00 +02:00
|
|
|
|
2009-09-28 23:59:09 +02:00
|
|
|
if ($alt == 2)
|
|
|
|
|
{
|
|
|
|
|
if ($fileread) $this->tab_loaded[$newdomain]=1; // Set domain file as loaded
|
|
|
|
|
|
|
|
|
|
if (empty($this->tab_loaded[$newdomain])) $this->tab_loaded[$newdomain]=2; // Marque ce fichier comme non trouve
|
|
|
|
|
}
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2010-02-23 21:30:55 +01:00
|
|
|
// Check to be sure that SeparatorDecimal differs from SeparatorThousand
|
2009-12-29 18:53:48 +01:00
|
|
|
if (! empty($this->tab_translate["SeparatorDecimal"]) && ! empty($this->tab_translate["SeparatorThousand"])
|
2010-01-13 17:26:19 +01:00
|
|
|
&& $this->tab_translate["SeparatorDecimal"] == $this->tab_translate["SeparatorThousand"]) $this->tab_translate["SeparatorThousand"]='';
|
2009-12-16 22:42:42 +01:00
|
|
|
|
2008-03-31 17:17:39 +02:00
|
|
|
return 1;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2005-10-30 02:07:00 +01:00
|
|
|
|
2009-08-25 16:36:03 +02:00
|
|
|
/**
|
2010-10-18 20:18:12 +02:00
|
|
|
* Return translated value of key. Search in lang file, then into database.
|
2011-01-23 23:39:48 +01:00
|
|
|
* If not found, return key.
|
|
|
|
|
* WARNING: To avoid infinite loop (getLabelFromKey->transnoentities->getTradFromKey), getLabelFromKey must
|
|
|
|
|
* not be called with same value than input.
|
2009-08-25 16:36:03 +02:00
|
|
|
*
|
2010-07-21 19:58:22 +02:00
|
|
|
* @param key
|
|
|
|
|
* @return string
|
2009-08-25 16:36:03 +02:00
|
|
|
*/
|
2009-08-07 02:49:43 +02:00
|
|
|
function getTradFromKey($key)
|
|
|
|
|
{
|
|
|
|
|
global $db;
|
|
|
|
|
$newstr=$key;
|
2011-03-08 11:09:15 +01:00
|
|
|
if (preg_match('/^CurrencySing([A-Z][A-Z][A-Z])$/i',$key,$reg))
|
2009-08-07 02:49:43 +02:00
|
|
|
{
|
2009-11-06 22:43:29 +01:00
|
|
|
$newstr=$this->getLabelFromKey($db,$reg[1],'c_currencies','code_iso','labelsing');
|
2009-08-07 02:49:43 +02:00
|
|
|
}
|
2011-03-08 11:09:15 +01:00
|
|
|
else if (preg_match('/^Currency([A-Z][A-Z][A-Z])$/i',$key,$reg))
|
2009-08-07 02:49:43 +02:00
|
|
|
{
|
|
|
|
|
$newstr=$this->getLabelFromKey($db,$reg[1],'c_currencies','code_iso','label');
|
|
|
|
|
}
|
2011-03-08 11:09:15 +01:00
|
|
|
else if (preg_match('/^SendingMethod([0-9A-Z]+)$/i',$key,$reg))
|
2009-08-07 02:49:43 +02:00
|
|
|
{
|
2010-09-06 02:02:55 +02:00
|
|
|
$newstr=$this->getLabelFromKey($db,$reg[1],'c_shipment_mode','code','libelle');
|
2009-08-07 02:49:43 +02:00
|
|
|
}
|
2011-03-08 11:09:15 +01:00
|
|
|
else if (preg_match('/^PaymentTypeShort([0-9A-Z]+)$/i',$key,$reg))
|
2010-10-18 20:18:12 +02:00
|
|
|
{
|
|
|
|
|
$newstr=$this->getLabelFromKey($db,$reg[1],'c_paiement','code','libelle');
|
|
|
|
|
}
|
2011-03-08 11:09:15 +01:00
|
|
|
else if (preg_match('/^Civility([0-9A-Z]+)$/i',$key,$reg))
|
2011-01-23 23:39:48 +01:00
|
|
|
{
|
|
|
|
|
$newstr=$this->getLabelFromKey($db,$reg[1],'c_civilite','code','civilite');
|
|
|
|
|
}
|
2011-03-08 11:09:15 +01:00
|
|
|
else if (preg_match('/^OrderSource([0-9A-Z]+)$/i',$key,$reg))
|
|
|
|
|
{
|
|
|
|
|
// TODO Add a table for OrderSourceX
|
|
|
|
|
//$newstr=$this->getLabelFromKey($db,$reg[1],'c_ordersource','code','label');
|
|
|
|
|
}
|
2011-01-23 23:39:48 +01:00
|
|
|
return $newstr;
|
2009-08-07 02:49:43 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
/**
|
2010-10-18 20:18:12 +02:00
|
|
|
* Return text translated of text received as parameter (and encode it into HTML)
|
2009-05-11 18:26:54 +02:00
|
|
|
* Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif
|
|
|
|
|
* et si toujours pas trouve, il est retourne tel quel
|
|
|
|
|
* Les parametres de cette methode peuvent contenir de balises HTML.
|
2010-10-18 20:18:12 +02:00
|
|
|
* @param key cle de chaine a traduire
|
|
|
|
|
* @param param1 chaine de param1
|
|
|
|
|
* @param param2 chaine de param2
|
|
|
|
|
* @param param3 chaine de param3
|
|
|
|
|
* @param param4 chaine de param4
|
|
|
|
|
* @param maxsize taille max
|
|
|
|
|
* @return string Chaine traduite et code en HTML
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function trans($key, $param1='', $param2='', $param3='', $param4='', $maxsize=0)
|
|
|
|
|
{
|
2009-12-17 16:44:51 +01:00
|
|
|
if (! empty($this->tab_translate[$key])) // Translation is available
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2011-03-08 16:14:42 +01:00
|
|
|
$str=$this->tab_translate[$key];
|
2010-06-26 12:14:54 +02:00
|
|
|
|
|
|
|
|
if (! preg_match('/^Format/',$key)) $str=sprintf($str,$param1,$param2,$param3,$param4); // Replace %s and %d except for FormatXXX strings.
|
2009-05-11 18:26:54 +02:00
|
|
|
if ($maxsize) $str=dol_trunc($str,$maxsize);
|
2011-03-08 16:16:03 +01:00
|
|
|
|
|
|
|
|
// We replace some HTML tags by __xx__ to avoid having them encoded by htmlentities
|
2011-03-08 16:14:42 +01:00
|
|
|
$str=str_replace(array('<','>','"',),array('__lt__','__gt__','__quot__'),$str);
|
2009-05-11 18:26:54 +02:00
|
|
|
|
2011-03-08 16:14:42 +01:00
|
|
|
$str=$this->convToOutputCharset($str); // Convert string to $this->charset_output
|
2009-05-11 18:26:54 +02:00
|
|
|
|
2011-03-08 16:16:03 +01:00
|
|
|
// Crypt string into HTML
|
2011-03-08 16:14:42 +01:00
|
|
|
// $str est une chaine stockee en memoire au format $this->charset_output
|
|
|
|
|
$str=htmlentities($str,ENT_QUOTES,$this->charset_output);
|
2009-05-11 18:26:54 +02:00
|
|
|
|
2011-03-08 16:16:03 +01:00
|
|
|
// Restore HTML tags
|
2011-03-08 16:14:42 +01:00
|
|
|
$str=str_replace(array('__lt__','__gt__','__quot__'),array('<','>','"',),$str);
|
|
|
|
|
return $str;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2009-05-23 00:18:59 +02:00
|
|
|
else // Translation is not available
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2011-03-08 16:14:42 +01:00
|
|
|
$str=$this->getTradFromKey($key);
|
|
|
|
|
return $this->convToOutputCharset($str);
|
2007-05-26 00:23:03 +02:00
|
|
|
}
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2008-07-28 11:09:03 +02:00
|
|
|
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2008-10-20 03:05:41 +02:00
|
|
|
/**
|
2011-03-08 16:14:42 +01:00
|
|
|
* Return translated value of a text string
|
2009-05-11 18:26:54 +02:00
|
|
|
* Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif
|
|
|
|
|
* et si toujours pas trouve, il est retourne tel quel.
|
|
|
|
|
* Parameters of this method must not contains any HTML tags.
|
2011-03-08 16:14:42 +01:00
|
|
|
* @param key key of string to translate
|
|
|
|
|
* @param param1 chaine de param1
|
|
|
|
|
* @param param2 chaine de param2
|
|
|
|
|
* @param param3 chaine de param3
|
|
|
|
|
* @param param4 chaine de param4
|
|
|
|
|
* @return string chaine traduite
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function transnoentities($key, $param1='', $param2='', $param3='', $param4='')
|
|
|
|
|
{
|
2009-12-17 16:44:51 +01:00
|
|
|
if (! empty($this->tab_translate[$key]))
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
|
|
|
|
// Si la traduction est disponible
|
2009-08-07 02:49:43 +02:00
|
|
|
$newstr=sprintf($this->tab_translate[$key],$param1,$param2,$param3,$param4);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$newstr=$this->getTradFromKey($key);
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
return $this->convToOutputCharset($newstr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Return translated value of a text string
|
2009-05-11 18:26:54 +02:00
|
|
|
* Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif
|
|
|
|
|
* et si toujours pas trouve, il est retourne tel quel.
|
|
|
|
|
* No convert to encoding charset of lang object is done.
|
|
|
|
|
* Parameters of this method must not contains any HTML tags.
|
2010-11-13 02:58:19 +01:00
|
|
|
* @param key key of string to translate
|
|
|
|
|
* @param param1 chaine de param1
|
|
|
|
|
* @param param2 chaine de param1
|
|
|
|
|
* @param param3 chaine de param1
|
|
|
|
|
* @param param4 chaine de param1
|
|
|
|
|
* @return string chaine traduite
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='')
|
|
|
|
|
{
|
2009-12-17 16:44:51 +01:00
|
|
|
if (! empty($this->tab_translate[$key]))
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
|
|
|
|
// Si la traduction est disponible
|
2009-08-07 02:49:43 +02:00
|
|
|
$newstr=sprintf($this->tab_translate[$key],$param1,$param2,$param3,$param4);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$newstr=$this->getTradFromKey($key);
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
return $newstr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Return translation of a key depending on country
|
|
|
|
|
* @param str string root to translate
|
|
|
|
|
* @param countrycode country code (FR, ...)
|
|
|
|
|
* @return string translated string
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function transcountry($str, $countrycode)
|
|
|
|
|
{
|
|
|
|
|
if ($this->tab_translate["$str$countrycode"]) return $this->trans("$str$countrycode");
|
|
|
|
|
else return $this->trans($str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-09-15 10:36:13 +02:00
|
|
|
* Retourne la version traduite du texte passe en parametre complete du code pays
|
|
|
|
|
* @param str string root to translate
|
|
|
|
|
* @param countrycode country code (FR, ...)
|
|
|
|
|
* @return string translated string
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function transcountrynoentities($str, $countrycode)
|
|
|
|
|
{
|
|
|
|
|
if ($this->tab_translate["$str$countrycode"]) return $this->transnoentities("$str$countrycode");
|
|
|
|
|
else return $this->transnoentities($str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Convert a string into output charset (this->charset_output that should be defined to conf->file->character_set_client)
|
|
|
|
|
* @param str String to convert
|
|
|
|
|
* @param pagecodefrom Page code of src string
|
|
|
|
|
* @return string Converted string
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function convToOutputCharset($str,$pagecodefrom='UTF-8')
|
|
|
|
|
{
|
|
|
|
|
if ($pagecodefrom == 'ISO-8859-1' && $this->charset_output == 'UTF-8') $str=utf8_encode($str);
|
2010-04-28 13:14:53 +02:00
|
|
|
if ($pagecodefrom == 'UTF-8' && $this->charset_output == 'ISO-8859-1') $str=utf8_decode(str_replace('€',chr(128),$str));
|
2007-05-26 00:23:03 +02:00
|
|
|
return $str;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Return list of all available languages
|
|
|
|
|
* @param langdir Directory to scan
|
2010-12-14 16:04:56 +01:00
|
|
|
* @param maxlength Max length for each value in combo box (will be truncated)
|
2010-11-13 02:58:19 +01:00
|
|
|
* @return array List of languages
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
2010-02-28 19:37:29 +01:00
|
|
|
function get_available_languages($langdir=DOL_DOCUMENT_ROOT,$maxlength=0)
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-03-03 08:42:11 +01:00
|
|
|
global $conf;
|
2010-05-08 04:16:29 +02:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
// We scan directory langs to detect available languages
|
2010-02-18 13:58:42 +01:00
|
|
|
$handle=opendir($langdir."/langs");
|
2009-05-11 18:26:54 +02:00
|
|
|
$langs_available=array();
|
2010-02-18 13:58:42 +01:00
|
|
|
while ($dir = trim(readdir($handle)))
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-02-18 13:58:42 +01:00
|
|
|
if (preg_match('/^[a-z]+_[A-Z]+/i',$dir))
|
2009-05-11 18:26:54 +02:00
|
|
|
{
|
2010-02-18 13:58:42 +01:00
|
|
|
$this->load("languages");
|
2010-02-20 14:15:28 +01:00
|
|
|
|
2010-05-03 12:24:22 +02:00
|
|
|
if (isset($conf->global->MAIN_SHOW_LANGUAGE_CODE) && $conf->global->MAIN_SHOW_LANGUAGE_CODE)
|
2010-03-03 08:42:11 +01:00
|
|
|
{
|
|
|
|
|
$langs_available[$dir] = $dir.': '.dol_trunc($this->trans('Language_'.$dir),$maxlength);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$langs_available[$dir] = $this->trans('Language_'.$dir);
|
|
|
|
|
}
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $langs_available;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Return if a filename $filename exists for current language (or alternate language)
|
|
|
|
|
* @param filename Language filename to search
|
|
|
|
|
* @param searchalt Search also alernate language file
|
|
|
|
|
* @return boolean true if exists and readable
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function file_exists($filename,$searchalt=0)
|
|
|
|
|
{
|
|
|
|
|
// Test si fichier dans repertoire de la langue
|
2008-12-12 03:16:14 +01:00
|
|
|
foreach($this->dir as $searchdir)
|
|
|
|
|
{
|
2009-12-17 16:44:51 +01:00
|
|
|
if (is_readable(dol_osencode($searchdir."/langs/".$this->defaultlang."/".$filename))) return true;
|
2009-05-11 18:26:54 +02:00
|
|
|
|
2010-01-13 17:26:19 +01:00
|
|
|
if ($searchalt)
|
2009-12-17 16:44:51 +01:00
|
|
|
{
|
2009-05-11 18:26:54 +02:00
|
|
|
// Test si fichier dans repertoire de la langue alternative
|
2009-12-17 16:44:51 +01:00
|
|
|
if ($this->defaultlang != "en_US") $filenamealt = $searchdir."/langs/en_US/".$filename;
|
|
|
|
|
else $filenamealt = $searchdir."/langs/fr_FR/".$filename;
|
|
|
|
|
if (is_readable(dol_osencode($filenamealt))) return true;
|
2009-05-11 18:26:54 +02:00
|
|
|
}
|
2008-12-12 03:16:14 +01:00
|
|
|
}
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-08-25 16:36:03 +02:00
|
|
|
/**
|
2010-11-13 02:58:19 +01:00
|
|
|
* Return full text translated to language label for a key. Store key-label in a cache.
|
|
|
|
|
* This function need module "numberwords" to be installed. If not it will return
|
|
|
|
|
* same number (this module is not provided by default as it use non GPL source code).
|
|
|
|
|
* @param number Number to encode in full text
|
|
|
|
|
* @param isamount 1=It's an amount, 0=it's just a number
|
|
|
|
|
* @return string Label translated in UTF8 (but without entities)
|
2009-08-25 16:36:03 +02:00
|
|
|
* 10 if setDefaultLang was en_US => ten
|
|
|
|
|
* 123 if setDefaultLang was fr_FR => cent vingt trois
|
|
|
|
|
*/
|
|
|
|
|
function getLabelFromNumber($number,$isamount=0)
|
|
|
|
|
{
|
2009-08-25 22:57:54 +02:00
|
|
|
global $conf;
|
|
|
|
|
|
2010-01-13 17:26:19 +01:00
|
|
|
/*
|
2009-08-25 16:36:03 +02:00
|
|
|
$outlang=$this->defaultlang; // Output language we want
|
2009-10-20 15:14:44 +02:00
|
|
|
$outlangarray=explode('_',$outlang,2);
|
2009-08-25 16:36:03 +02:00
|
|
|
// If lang is xx_XX, then we use xx
|
|
|
|
|
if (strtolower($outlangarray[0]) == strtolower($outlangarray[1])) $outlang=$outlangarray[0];
|
2010-01-13 17:26:19 +01:00
|
|
|
*/
|
2009-08-25 16:36:03 +02:00
|
|
|
|
2009-08-25 22:57:54 +02:00
|
|
|
$newnumber=$number;
|
|
|
|
|
foreach ($conf->file->dol_document_root as $dirroot)
|
|
|
|
|
{
|
|
|
|
|
$dir=$dirroot."/includes/modules/substitutions";
|
|
|
|
|
$fonc='numberwords';
|
|
|
|
|
if (file_exists($dir.'/functions_'.$fonc.'.lib.php'))
|
|
|
|
|
{
|
|
|
|
|
include_once($dir.'/functions_'.$fonc.'.lib.php');
|
|
|
|
|
$newnumber=numberwords_getLabelFromNumber($this,$number,$isamount);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-25 16:36:03 +02:00
|
|
|
|
2009-08-25 22:57:54 +02:00
|
|
|
return $newnumber;
|
2009-08-25 16:36:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
/**
|
2010-10-18 20:18:12 +02:00
|
|
|
* Return a label for a key. Store key-label into cache variable $this->cache_labels to save SQL requests to get labels.
|
|
|
|
|
* @param db Database handler
|
|
|
|
|
* @param key Key to get label (key in language file)
|
|
|
|
|
* @param tablename Table name without prefix
|
|
|
|
|
* @param fieldkey Field for key
|
|
|
|
|
* @param fieldlabel Field for label
|
|
|
|
|
* @return string Label in UTF8 (but without entities)
|
|
|
|
|
* @remarks This function can be used to get label in database but more often to get code from key id.
|
2009-05-11 18:26:54 +02:00
|
|
|
*/
|
|
|
|
|
function getLabelFromKey($db,$key,$tablename,$fieldkey,$fieldlabel)
|
|
|
|
|
{
|
|
|
|
|
// If key empty
|
2008-05-03 23:44:32 +02:00
|
|
|
if ($key == '') return '';
|
2008-06-30 21:34:53 +02:00
|
|
|
|
|
|
|
|
// Check in language array
|
2009-05-11 18:26:54 +02:00
|
|
|
if ($this->transnoentities($key) != $key)
|
|
|
|
|
{
|
|
|
|
|
return $this->transnoentities($key); // Found in language array
|
|
|
|
|
}
|
2009-01-15 23:49:06 +01:00
|
|
|
|
2008-06-30 21:34:53 +02:00
|
|
|
// Check in cache
|
2009-05-11 18:26:54 +02:00
|
|
|
if (isset($this->cache_labels[$tablename][$key])) // Can be defined to 0 or ''
|
|
|
|
|
{
|
|
|
|
|
return $this->cache_labels[$tablename][$key]; // Found in cache
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT ".$fieldlabel." as label";
|
|
|
|
|
$sql.= " FROM ".MAIN_DB_PREFIX.$tablename;
|
|
|
|
|
$sql.= " WHERE ".$fieldkey." = '".$key."'";
|
|
|
|
|
dol_syslog('Translate::getLabelFromKey sql='.$sql,LOG_DEBUG);
|
|
|
|
|
$resql = $db->query($sql);
|
|
|
|
|
if ($resql)
|
|
|
|
|
{
|
|
|
|
|
$obj = $db->fetch_object($resql);
|
|
|
|
|
if ($obj) $this->cache_labels[$tablename][$key]=$obj->label;
|
2010-10-18 20:18:12 +02:00
|
|
|
else $this->cache_labels[$tablename][$key]=$key;
|
|
|
|
|
|
2009-05-11 18:26:54 +02:00
|
|
|
$db->free($resql);
|
|
|
|
|
return $this->cache_labels[$tablename][$key];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2008-03-16 15:52:31 +01:00
|
|
|
$this->error=$db->lasterror();
|
2009-02-20 21:28:16 +01:00
|
|
|
dol_syslog("Translate::getLabelFromKey error=".$this->error,LOG_ERR);
|
2009-05-11 18:26:54 +02:00
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-10-20 03:05:41 +02:00
|
|
|
|
2003-05-02 12:33:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|