更改 CodeIgniter 日历库的语言

Change Language of CodeIgniter calendar library

我正在努力使我的网站国际化...到目前为止,我可以翻译除我的日期和时间之外的所有内容。

我正在尝试获取以法语显示的日期和时间。

我试过setlocale(LC_TIME, 'France');在加载日历库之前,都没有用。

我正在使用默认的 codeigniter 日历库。

编辑:我的日历功能

/**
 * generates an HTML calendar table
 * @param string   $year
 * @param string   $month
 * @param int|null $student_id
 */
public function generateCalendar($year, $month, $student_id = null)
{
    $params = [
        'show_next_prev' => false,
    ];

    $params['translated_month_names'] = [
        '01' => 'sfdgsdfg',
        '02' => 'vncvbm',
        '03' => 'vbbddg',
        '04' => 'xcvbbb',
        '05' => 'xfjyt',
        '06' => 'xfghxfgb',
        '07' => 'jhdcbxcvb',
        '08' => 'zgfbhxcvn',
        '09' => 'zrthxgb',
        '10' => 'zfgxcgnx',
        '11' => 'november',
        '12' => 'december'
    ];

    // loading the calendar and passing the params and data
    $this->load->library('calendar', $params, $month);
    return $this->$month->generate($year, $month);
}

你声明偏好了吗?

$prefs['translated_day_names'] = array('monday in your language', 'wtorek', 'środa', 'czwartek', 'piątek', 'sob', 'niedziela');
$prefs['translated_month_names'] = array('01' => 'january in your language', '02' => '...', '03' => '...', '04' => '...', '05' => '...', '06' => '...', '07' => '.', '08' => '.kk', '09' => 'yyy', '10' => 'yy', '11' => 'november in your language', '12' => 'december');

然后

$this->load->library('calendar', $prefs);

我通过更改核心 Calender class (system/libraries/Calendar.php) 中的代码解决了这个讨厌的问题。文档中没有任何关于语言的内容,所以我决定自己调整它。

您也可以选择扩展基础库并覆盖我修改的两个函数,但是我没有这样做,因为某些奇怪的原因它找不到基础 classes (system/libraries/CI_Calendar) 当我尝试按照文档中的描述扩展它们时。它总是 return 在我的设置中找不到 CI_Calendar class,但这是另一回事。

在 libraries/Calendar.php 中,我做了以下小改动,请注意,这不是完整的功能代码,您可能需要稍微调整一下以获得所需的结果(这是对我来说):

函数get_month_name()

$months = $this->CI->lang->line('translated_month_names');

    return ($months === FALSE)
        ? ucfirst(substr($month_names[$month], 4))
        : $months[$month];

当加载的语言文件中没有 "translated_month_names" 的情况时,它将采用上面声明的默认值。

函数get_day_names()

$days = array();

    if($this->CI->lang->line('translated_day_names')){
        $days = $this->CI->lang->line('translated_day_names');
    }else{
        for ($i = 0, $c = count($day_names); $i < $c; $i++)
        {
        $days[] = ($this->CI->lang->line('cal_'.$day_names[$i]) === FALSE) ? ucfirst($day_names[$i]) : $this->CI->lang->line('cal_'.$day_names[$i]);
        }   
    }

如果有一行,这将确保它将解析我的语言文件,否则它将采用默认值(英语)。我希望这可以帮助这个地狱般的图书馆的一些人。我现在使用 CodeIgniter 提供的默认语言 class 工作得很好。

您可能无法通过在 $perfs 变量中添加一些数组来更改语言,但我有另一种方法,通过更改库文件:

C:\xampp\htdocs\CI 文件夹 Name\system\libraries\calendar.php

$day_names = array('su', 'mo', 'tu', 'we', 'th', 'fr', 'sa');