2012-07-31 59 views
1

我正在使用Codeigniter,並且通過製作幫助程序和相應的.po/.mo文件來實現了gettext/.po國際化。在逗號分隔的句點中使用gettext結果

,是爲了替換每個字符串看起來是這樣的:_('some text here');

但是,當成功地實施這個之後,我注意到,這導致像100.98等數PHP計算,用100,98改變。此外,該句點以逗號改變。

例如,此計算通常導致一些像1037.67:

<?php 
     // Space total 
     $space_total = $space_info[0]->space_total; 

     // Prepare space used 
     $space_used = $space[0]->media_size/1000000; 
     $space_used = round($space_used, 1); 

     // Prepare progressbar 
     $percent = $space_used/$space_total * 100; 

    ?> 

但是,當實施後的gettext它導致1037,67。如果有其他因素導致此問題,我遇到了疑難解答,但只有在幫助程序中運行gettext語言init函數時纔會發生此問題。

這裏是助手:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

function set_translation_language($language){ 
    $lang_path = FCPATH.APPPATH.'language/locales'; 
    putenv('LANG='.$language.'.UTF-8'); 
    setlocale(LC_ALL, $language.'.UTF-8'); 
    bindtextdomain('lang', $lang_path); 
    textdomain('lang'); 
} 

被稱爲本爲例:

set_translation_language('en_US'); 

難道有人有一個解釋嗎?

+0

做對某人有一個解釋或解決方案呢? – user1554299 2012-08-01 11:42:08

回答

0

這是因爲您在調用setlocale()時使用了LC_ALL。 LC_ALL不僅包含文本,還包括字符串排序,數字格式,日期格式等。

您應該使用LC_MESSAGES來翻譯文本。只有在輸出希望以本地格式格式化的數字數據時,才應使用LC_NUMERIC。

set_translation_language($ language)應該使用setlocale(LC_MESSAGES,$ language。'。UTF-8');

當你想要一些輸出,你應該做

$percent = $space_used/$space_total * 100; 
$current_locale = setlocale(LC_NUMERIC, 0); // Get the current locale 
setlocale(LC_NUMERIC, $language.'.UTF-8); 
print $percent; 
setlocale(LC_NUMERIC, $current_locale);