diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang
index 79543e7a739..22d2a98458c 100644
--- a/htdocs/langs/pt_BR/admin.lang
+++ b/htdocs/langs/pt_BR/admin.lang
@@ -89,7 +89,7 @@ CurrentSessionTimeOut=Time out Sessão atual
OSEnv=Entorno SO
Box=Caixa
Boxes=Caixas
-MaxNbOfLinesForBoxes=Nº de linhas máximo para as caixas
+MaxNbOfLinesForBoxes=N� de linhas máximo para as caixas
PositionByDefault=Posição por default
Position=Ordem
MenusDesc=Os configuradores do menu definem o conteúdo das 2 barras de menus (a barra horizontal e a barra vertical). É possÃvel atribuir configuradores diferentes segundo o usuário seja interno ou externo.
@@ -174,7 +174,7 @@ OfficialWebSiteFr=site web oficial falado/escrito em francês
OfficialWikiFr=Wiki falado/escrito em francês
OfficialWiki=Wiki ERP
OfficialDemo=Demo em linha ERP
-ForDocumentationSeeWiki=Para a documentação de usuário, programador ou Perguntas Freqüentess (FAQ), consulte o wiki do ERP:
inglé.
@@ -215,11 +215,11 @@ UnpackPackageInDolibarrRoot=Descompactar o pacote na pasta raiz do ERP %s
SetupIsReadyForUse=A Instalação está finalizada e o ERP está disponÃvel com o novo componente.
CurrentVersion=Versão atual do ERP
CallUpdatePage=Chamar a página de atualização da estrutura e dados da base de dados %s.
-LastStableVersion=Última Versão estável
-GenericMaskCodes=Pode introduzir qualquer máscara numérica. Nesta máscara, pode utilizar as seguintes etiquetas:
{000000} corresponde a um número que se incrementa em cada um de %s. Introduza tantos zeros como longitude que deseje mostrar. O contador completarse-á a partir de zeros pela esquerda com o fim de ter tantos zeros como a máscara.
{000000+000} b> Igual que o anterior, com uma compensação correspondente ao número da direita do sinal + aplica-se a partir do primeiro %s.
{000000@x} igual que o anterior, mas o contador restabelece-se a zero quando se chega a x meses (x entre 1 e 12). Se esta opção se utiliza e x é de 2 ou superior, então a seqüência {yy}{mm} ou {yyyy}{mm} também é necessário.
{dd} dias (01 a 31).
{mm} mês (01 a 12).
{yy}, {yyyy} ou {e} ano em 2, 4 ou 1 figura.
-GenericMaskCodes2={cccc} o código de cliente em nº de caracteres
{cccc000} o código de cliente em nº caracter é seguido por um contador próprio ao cliente sem offset, completado com zeros até completar a máscara, e voltando a zero ao mesmo tempo que o contador global.
+LastStableVersion=�ltima Versão estável
+GenericMaskCodes=Pode introduzir qualquer máscara numérica. Nesta máscara, pode utilizar as seguintes etiquetas:
{000000} corresponde a um número que se incrementa em cada um de %s. Introduza tantos zeros como longitude que deseje mostrar. O contador completarse-á a partir de zeros pela esquerda com o fim de ter tantos zeros como a máscara.
{000000+000} b> Igual que o anterior, com uma compensação correspondente ao número da direita do sinal + aplica-se a partir do primeiro %s.
{000000@x} igual que o anterior, mas o contador restabelece-se a zero quando se chega a x meses (x entre 1 e 12). Se esta opção se utiliza e x é de 2 ou superior, então a seq�ência {yy}{mm} ou {yyyy}{mm} também é necessário.
{dd} dias (01 a 31).
{mm} mês (01 a 12).
{yy}, {yyyy} ou {e} ano em 2, 4 ou 1 figura.
+GenericMaskCodes2={cccc} o código de cliente em n� de caracteres
{cccc000} o código de cliente em n� caracter é seguido por um contador próprio ao cliente sem offset, completado com zeros até completar a máscara, e voltando a zero ao mesmo tempo que o contador global.
GenericMaskCodes3=qualquer outro caracter0 na máscara se fica sem alterações.
Não é permitido espaços
-GenericMaskCodes4a=Exemplo em 99 ª %s o Fornecedor a Empresa realizada em 31/03/2007:
+GenericMaskCodes4a=Exemplo em 99 � %s o Fornecedor a Empresa realizada em 31/03/2007:
GenericMaskCodes4b=Exemplo sobre um Fornecedor criado em 31/03/2007:
GenericMaskCodes5=ABC{yy}{mm}-{000000} dará ABC0703-000099
{0000+100}-XXX/{dd}/YYY dará 0199-XXX/31/YYY
GenericNumRefModelDesc=Devolve um número criado na linha em uma máscara definida.
@@ -228,7 +228,7 @@ ServerNotAvailableOnIPOrPort=Servidor não disponÃvel não endereço %s
DoTestServerAvailability=Teste de conectividade com o servidor
DoTestSend=Teste envio
DoTestSendHTML=Teste envio HTML
-ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Erro, não se pode usar opção @ se a seqüência {yy}{mm} ou {yyyy}{mm} não se encontra a máscara.
+ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Erro, não se pode usar opção @ se a seq�ência {yy}{mm} ou {yyyy}{mm} não se encontra a máscara.
UMask=Parâmetro UMask de novos arquivos em Unix/Linux/BSD.
UMaskExplanation=Este parâmetro determina os direitos dos arquivos criados não servidor do ERP (durante o carregamento, por Exemplo).
Este deve ter o valor octal (por Exemplo, 0666 significa leitura / escrita para todos).
Este parâmetro não tem nenhum efeito sobre um servidor Windows.
SeeWikiForAllTeam=Veja o wiki para mais detalhes de todos os autores e da sua organização
@@ -536,7 +536,7 @@ VATIsUsedExampleFR=em Francia, se trata das sociedades u organismos que eligen u
VATIsNotUsedExampleFR=em Francia, se trata de associações exentas de ICMS o sociedades, organismos o profesiones liberales que han eligedo o regime fiscal de módulos (ICMS em franquicia), pagando um ICMS em franquicia sem fazer declaração de ICMS. Esta elecção hace aparecer a anotação "IVA não aplicable - art-293B do CGI" em faturas.
LabelUsedByDefault=Etiqueta que se utilizará se não se encontra tradução para este código
LabelOnDocuments=Etiqueta sobre documentos
-NbOfDays=Nº de Dias
+NbOfDays=N� de Dias
AtEndOfMonth=No Fim de Mês
Offset=Deslocado
AlwaysActive=Sempre Ativo
@@ -565,7 +565,7 @@ DatabaseConfiguration=configuração da base de dados
Tables=Tabelas
TableName=Nome da tabela
TableLineFormat=Formato linhas
-NbOfRecord=Nº Reg.
+NbOfRecord=N� Reg.
Constraints=Constrangimentos
ConstraintsType=Tipo de constrangimento
ConstraintsToShowOrNotEntry=Constrangimento para mostrar não menu de entrada
@@ -905,7 +905,7 @@ LDAPDescValues=os valores de Exemplos se adaptan a OpenLDAP com os schema
ForANonAnonymousAccess=Para um acesso autentificado
##### Products #####=
ProductSetup=configuração do módulo produtos
-NumberOfProductShowInSelect=Nº de produtos max em listas (0
+NumberOfProductShowInSelect=N� de produtos max em listas (0
ConfirmDeleteProductLineAbility=confirmação de eliminação de uma linha de produzido nos formulários
ModifyProductDescAbility=Personalização das descripciones dos produtos nos formulários
ViewProductDescInFormAbility=visualização das descripciones dos produtos nos formulários
diff --git a/htdocs/theme/eldy/eldy.css.php b/htdocs/theme/eldy/eldy.css.php
index 13c6724ab35..838b2d2b1b3 100644
--- a/htdocs/theme/eldy/eldy.css.php
+++ b/htdocs/theme/eldy/eldy.css.php
@@ -339,7 +339,7 @@ ul.tmenu {
list-style: none;
}
li.tmenu {
- float: left;
+ float: ;
padding-left:5px;
padding-right:5px;
padding-top: 2px;
diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php
index 9e06d93a9b6..88dd5b8e28e 100644
--- a/htdocs/translate.class.php
+++ b/htdocs/translate.class.php
@@ -167,18 +167,12 @@ class Translate {
* If data for file already loaded, do nothing.
* All data in translation array are stored in UTF-8 format.
* \param domain File name to load (.lang file). Use @ before value if domain is in a module directory.
- * \param alt Use alternate file even if file in target language is found
- * \param soptafterdirection Stop when the DIRECTION tag is found
+ * \param alt 0,1,2
+ * \param soptafterdirection Stop when the DIRECTION tag is found (optimize)
* \param forcelangdir To force a lang directory
- * \return int <0 if KO, >0 if OK
+ * \return int <0 if KO, 0 if already loaded, >0 if OK
* \remarks tab_loaded is completed with $domain key.
* Value for hash are: 1:Loaded from disk, 2:Not found, 3:Loaded from cache
- * TODO Make a code simpler:
- * First call is with alt=0. if xx=YY, then force alt to 1. If xx_YY == en_US, fr_FR or es_ES, then force alt=2
- * $langofdir=$this->defaultlang or forcelangdir.
- * Define lang file and try to load it if exists.
- * Then if alt < 2, we call again with alt=alt+1 and a forcelangdir;
- * We set the tab_loaded when alt == 2
*/
function Load($domain,$alt=0,$stopafterdirection=0,$forcelangdir='')
{
@@ -191,45 +185,39 @@ class Translate {
exit;
}
- //dol_syslog("Translate::Load domain=".$domain." alt=".$alt." forcelangdir=".$forcelangdir." this->defaultlang=".$this->defaultlang);
+ //dol_syslog("Translate::Load Start domain=".$domain." alt=".$alt." forcelangdir=".$forcelangdir." this->defaultlang=".$this->defaultlang);
+
+ $newdomain=eregi_replace('@','',$domain); // Remove the @ if present
// Check cache
- if (empty($forcelangdir) && ! empty($this->tab_loaded[$domain])) { return; } // Le fichier de ce domaine est deja charge
+ if (! empty($this->tab_loaded[$newdomain])) // File already loaded for this domain
+ {
+ //dol_syslog("Translate::Load already loaded for ".$domain);
+ return 0;
+ }
+
+ $langofdir=(empty($forcelangdir)?$this->defaultlang:$forcelangdir);
+ $fileread=0;
+ //dol_syslog("Translate::Load langofdir=".$langofdir);
+
+ // Redefine alt
+ $langarray=split('_',$langofdir);
+ 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;
foreach($this->dir as $searchdir)
{
- $newalt=$alt;
-
// If $domain is @xxx instead of xxx then we look for module lang file htdocs/xxx/langs/code_CODE/xxx.lang
// instead of global lang file htdocs/langs/code_CODE/xxx.lang
- if (eregi('@',$domain)) // It's a language file of a module, we look in dir of this module.
- {
- $domain=eregi_replace('@','',$domain);
- $searchdir=$searchdir ."/".$domain."/langs";
- }
+ if (eregi('@',$domain)) $searchdir=$searchdir ."/".$newdomain."/langs";
else $searchdir=$searchdir."/langs";
// Directory of translation files
- $scandir = $searchdir."/".(empty($forcelangdir)?$this->defaultlang:$forcelangdir);
- $file_lang = $scandir . "/".$domain.".lang";
+ $scandir = $searchdir."/".$langofdir;
+ $file_lang = $scandir . "/".$newdomain.".lang";
$filelangexists=is_file($file_lang);
- //print 'Load default_lang='.$this->defaultlang.' alt='.$alt.' newalt='.$newalt.' '.$file_lang."-".$filelangexists.'
';
- // Check in "always available" alternate file if not found or if asked
- if ($newalt || ! $filelangexists)
- {
- // Dir of ALWAYS available alternate file (en_US, fr_FR, es_ES)
- if ($this->defaultlang == "en_US") $scandiralt = $searchdir."/fr_FR";
- elseif (eregi('^fr',$this->defaultlang) && $this->defaultlang != 'fr_FR') $scandiralt = $searchdir."/fr_FR";
- elseif (eregi('^en',$this->defaultlang) && $this->defaultlang != 'en_US') $scandiralt = $searchdir."/en_US";
- elseif (eregi('^es',$this->defaultlang) && $this->defaultlang != 'es_ES') $scandiralt = $searchdir."/es_ES";
- else $scandiralt = $searchdir."/en_US";
-
- $file_lang = $scandiralt . "/".$domain.".lang";
- $filelangexists=is_file($file_lang);
- $newalt=1;
- }
- //print 'Load alt='.$alt.' newalt='.$newalt.' '.$file_lang."-".$filelangexists.'
';
+ //dol_syslog('Translate::Load Try to read for alt='.$alt.' langofdir='.$langofdir.' file_lang='.$file_lang." => ".$filelangexists);
if ($filelangexists)
{
@@ -237,12 +225,12 @@ class Translate {
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
$enablelangcacheinsession=false;
- if ($enablelangcacheinsession && isset($_SESSION['lang_'.$domain]))
+ if ($enablelangcacheinsession && isset($_SESSION['lang_'.$newdomain]))
{
- foreach($_SESSION['lang_'.$domain] as $key => $value)
+ foreach($_SESSION['lang_'.$newdomain] as $key => $value)
{
$this->tab_translate[$key]=$value;
- $this->tab_loaded[$domain]=3; // Marque ce fichier comme charge depuis cache session
+ $this->tab_loaded[$newdomain]=3; // Set this file as loaded from cache in session
}
}
else
@@ -264,13 +252,12 @@ class Translate {
if (eregi('^CHARSET$',$key)) // This is to declare in which charset files are encoded
{
- $this->charset_inputfile[$domain]=strtoupper($value);
- //print 'File '.$file_lang.' is declared to have format '.$this->charset_inputfile[$domain].'
';
+ $this->charset_inputfile[$newdomain]=strtoupper($value);
+ //print 'File '.$file_lang.' is declared to have format '.$this->charset_inputfile[$newdomain].'
';
}
elseif (eregi('^DIRECTION$',$key)) // This is to declare direction of language
{
- // We do not load Separator values for alternate files
- if (! $newalt)
+ if ($alt < 2) // We do not load direction for alternate files 2
{
$this->direction=$value;
if ($stopafterdirection) break;
@@ -279,34 +266,22 @@ class Translate {
else
{
// On stocke toujours dans le tableau Tab en UTF-8
- //if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'UTF-8') $value=utf8_decode($value);
- if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'ISO-8859-1') $value=utf8_encode($value);
+ //if (empty($this->charset_inputfile[$newdomain]) || $this->charset_inputfile[$newdomain] == 'UTF-8') $value=utf8_decode($value);
+ 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;
- // We do not load Separator values for alternate files
- if (! $newalt || (! eregi('^Separator',$key)))
- {
- //print 'XX'.$key;
- $this->tab_translate[$key]=$value;
- }
if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session
}
}
}
}
+ $fileread=1;
fclose($fp);
- // For language other than fr_FR and en_US, we also load alternate file
- if (! $newalt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US")
- {
- // This function MUST NOT contains call to syslog
- //dol_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$domain.".lang file)", LOG_DEBUG);
- $this->load($domain,1,$stopafterdirection);
- }
-
- $this->tab_loaded[$domain]=1; // Marque ce fichier comme charge
-
// To save lang in session
- if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain;
+ if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$newdomain]=$tabtranslatedomain;
break; // Break loop on each root dir
}
@@ -314,21 +289,45 @@ class Translate {
}
}
- // Format for date
- if ($domain == 'main')
+ // Now we load alternate file
+ if ($alt == 0)
{
- $conf->format_date_short=empty($this->tab_translate['FormatDateShort'])?"%d/%m/%Y":$this->tab_translate['FormatDateShort']; # Format of day with PHP/C tags (strftime functions)
- $conf->format_date_short_java=empty($this->tab_translate['FormatDateShortJava'])?"dd/MM/yyyy":$this->tab_translate['FormatDateShortJava']; # Format of day with Java tags
- $conf->format_hour_short=empty($this->tab_translate['FormatHourShort'])?"%H:%M":$this->tab_translate['FormatHourShort'];
- $conf->format_date_text_short=empty($this->tab_translate['FormatDateTextShort'])?"%d %b %Y":$this->tab_translate['FormatDateTextShort'];
- $conf->format_date_text=empty($this->tab_translate['FormatDateText'])?"%d %B %Y":$this->tab_translate['FormatDateText'];
- $conf->format_date_hour_short=empty($this->tab_translate['FormatDateHourShort'])?"%d/%m/%Y %H:%M":$this->tab_translate['FormatDateHourShort'];
- $conf->format_date_hour_text_short=empty($this->tab_translate['FormatDateHourTextShort'])?"%d %b %Y %H:%M":$this->tab_translate['FormatDateHourTextShort'];
- $conf->format_date_hour_text=empty($this->tab_translate['FormatDateHourText'])?"%d %B %Y %H:%M":$this->tab_translate['FormatDateHourText'];
- //print $domain." => ".$this->defaultlang." ".$conf->format_date_hour_short." ".$this->tab_translate['FormatDateHourShort'];
+ // 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);
}
- if (empty($this->tab_loaded[$domain])) $this->tab_loaded[$domain]=2; // Marque ce fichier comme non trouve
+ if ($alt == 1)
+ {
+ // 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';
+ if (eregi('^fr',$langarray[0])) $langofdir='fr_FR';
+ if (eregi('^es',$langarray[0])) $langofdir='es_ES';
+ $this->load($domain,$alt+1,$stopafterdirection,$langofdir);
+ }
+
+ if ($alt == 2)
+ {
+ if ($fileread) $this->tab_loaded[$newdomain]=1; // Set domain file as loaded
+
+ // Format for date
+ if ($newdomain == 'main')
+ {
+ $conf->format_date_short=empty($this->tab_translate['FormatDateShort'])?"%d/%m/%Y":$this->tab_translate['FormatDateShort']; # Format of day with PHP/C tags (strftime functions)
+ $conf->format_date_short_java=empty($this->tab_translate['FormatDateShortJava'])?"dd/MM/yyyy":$this->tab_translate['FormatDateShortJava']; # Format of day with Java tags
+ $conf->format_hour_short=empty($this->tab_translate['FormatHourShort'])?"%H:%M":$this->tab_translate['FormatHourShort'];
+ $conf->format_date_text_short=empty($this->tab_translate['FormatDateTextShort'])?"%d %b %Y":$this->tab_translate['FormatDateTextShort'];
+ $conf->format_date_text=empty($this->tab_translate['FormatDateText'])?"%d %B %Y":$this->tab_translate['FormatDateText'];
+ $conf->format_date_hour_short=empty($this->tab_translate['FormatDateHourShort'])?"%d/%m/%Y %H:%M":$this->tab_translate['FormatDateHourShort'];
+ $conf->format_date_hour_text_short=empty($this->tab_translate['FormatDateHourTextShort'])?"%d %b %Y %H:%M":$this->tab_translate['FormatDateHourTextShort'];
+ $conf->format_date_hour_text=empty($this->tab_translate['FormatDateHourText'])?"%d %B %Y %H:%M":$this->tab_translate['FormatDateHourText'];
+ //print $domain." => ".$this->defaultlang." ".$conf->format_date_hour_short." ".$this->tab_translate['FormatDateHourShort'];
+ }
+
+ if (empty($this->tab_loaded[$newdomain])) $this->tab_loaded[$newdomain]=2; // Marque ce fichier comme non trouve
+ }
return 1;
}