You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中如何在foreach循环调用多语言国家列表数组

现有逻辑存在的问题
  • 硬依赖数据库查询:每次渲染下拉都要查询国家表,既增加了数据库开销,也无法天然支持多语言切换,数据库存储的国家名是固定语种的,切换语言后还要额外做翻译适配,逻辑冗余。
  • 已配置的语言包没有被复用:你已经在各语言包中提前定义了对应语种的国家列表数组,现有逻辑完全没有用到这部分配置,做了重复工作。
  • 不了解CodeIgniter Lang类的特性:CodeIgniter 3/4的$this->lang->line()方法默认只支持返回字符串类型的语言项,直接用这个方法获取数组类型的lang_country_list只会返回false,这是你无法直接拿到国家数组遍历的核心原因。
正确实现方式

步骤1:正确获取语言包中的国家数组

CodeIgniter的Lang类会把所有加载的语言项存到language属性中,你可以直接从该属性读取数组类型的语言项,推荐在控制器中处理后传递到视图,符合MVC规范:

// 先加载你的语言包,如果你已经全局加载过可以省略这步
$this->lang->load('你的语言包文件名', 当前激活的语种标识);
// 直接从language属性读取国家数组
$data['country_list'] = $this->lang->language['lang_country_list'] ?? [];
// 传参到视图
$this->load->view('你当前的视图文件名', $data);

步骤2:修改视图下拉渲染逻辑

如果需要保留原逻辑的data-id国家ID属性,建议先把语言包的国家数组调整为键为国家ID、值为国家名称的格式,保证不同语种的语言包中数组的键(国家ID)完全一致即可,修改后的视图代码如下:

<div class="col-md-4">
     <div class="form-group">
          <label><?php echo $this->lang->line('lang_country'); ?><span class="text-danger">*</span></label>
          <select class="form-control" name="Country" >
              <option value=""><?php echo $this->lang->line('lang_select'); ?></option>
              <?php if(!empty($country_list)){ 
                  foreach($country_list as $country_id => $country_name){ ?>
                  <option value="<?php echo $country_name; ?>" data-id="<?php echo $country_id; ?>"> <?php echo $country_name; ?></option> 
              <?php } } ?>
          </select>
     </div>
</div>

可选:调整后的语言包示例

english_lang.php:

$lang["lang_country_list"] = [
    1 => 'Afghanistan',
    2 => 'Albania',
    3 => 'Algeria',
    // 其余国家省略
];

french_lang.php:

$lang["lang_country_list"] = [
    1 => 'Afghanistan',
    2 => 'Albanie',
    3 => 'Algérie',
    // 其余国家省略
];

内容的提问来源于stack exchange,提问作者Jelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:39:01