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

Symfony 4.4中ICU翻译占位符依句位调整大小写问题

Symfony 4.4.41 ICU翻译大小写适配方案

解决思路

借助ICU翻译内置的格式化函数,在翻译规则里直接控制变量的大小写,避免业务代码耦合语言逻辑,同时满足不同语言的语法规范。

具体实现

1. 调整YAML翻译文件

在翻译文件中使用ICU的case格式器来处理变量:

  • 英文翻译(messages.en.yaml):
    delete_confirmation: "Delete {type, lowercase} for {supervisor}?"
    
  • 荷兰语翻译(messages.nl.yaml):
    delete_confirmation: "{type, uppercase, words} verwijderen voor {supervisor}?"
    
    • 英文里用lowercase将type转为全小写,符合句中单词的大小写规范;
    • 荷兰语里用uppercase, words确保变量首字母大写,适配句首的语法要求。

2. PHP代码中正常传参

无需在代码里处理大小写,直接传入原始变量值即可:

$translated = $translator->trans('delete_confirmation', [
    'type' => 'Preference',
    'supervisor' => 'Dr Hibbert'
]);
  • 英文环境输出:Delete preference for Dr Hibbert?
  • 荷兰语环境(传入Voorkeur时)输出:Voorkeur verwijderen voor Dr Hartman?

3. 进阶大小写控制

如果需要更精细的格式(比如仅首字母调整),可以使用ICU的其他格式器:

  • title:将每个单词的首字母大写,其余小写;
  • sentence:仅将第一个单词的首字母大写;
  • uppercase/lowercase:全大写/全小写。

不推荐的方案(耦合性高)

不要在业务代码里根据语言手动处理变量大小写,比如:

// 不推荐:语言逻辑耦合到业务代码
$type = $locale === 'nl' ? ucfirst($rawType) : strtolower($rawType);

这种方式会增加维护成本,后续新增语言时需要修改业务代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:27