我正在尝试将表单字段的翻译工作。我在Bundle的Ressource文件夹中有messages.en.yml
。
test: it works
form:
description: Add a description.
我想在EntityType
中构建一个表单,相应地转换表单字段的标签。
$builder->add(
'description',
null,
array('label' => 'form.description', 'required' => false)
);
但只显示文字字符串'form.description'
,而不是Add a description.
的预期翻译
我可以调用正确加载翻译服务和messages.en.yml
var_dump($this->get('translator')->trans('test'));
并获得翻译结果。
当我想将字符串'form.description'
视为应翻译的内容时,我错过了什么?
我想我无论如何都必须在它们上面调用trans功能,但是如何自动完成它?
答案 0 :(得分:38)
我必须明确设置翻译域
e.g
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
的情况
fooo.de.xlf
答案 1 :(得分:6)
在symfony 3.1中您不需要将转换器传递给表单类型构造函数。它将由表单字段名称自动翻译,如下所示:
控制器操作:
$form = $this->createForm(LoginType::class);
FormType类:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username',
TextType::class, ['label_format' => '%name%',]
);
}
您的翻译文件(yml):
username: Your translation for username field
希望它会帮助某人:)
答案 2 :(得分:4)
在形式中添加翻译是最好的主意 - 因为如果在枝条中发现更容易
{% trans_default_domain 'YourNameBundle' %}
{{'shot.tag.for.transle'|trans }}
您还必须记住捆绑中的翻译文件, 如果你从另一个扩展bundle(例如 - 你扩展了FosUserBundle) 你可以从这个包中翻译或使用带有参数的func trans
{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}
有一个很好的本地化。
答案 3 :(得分:1)
假设你要翻译成法语。然后你有 filename.en.xlf 和 filename.fr.xlf 。
现在,您希望将以下表单元素设为 description 可翻译。
while (true) {
try{
ConsumerRecords records = consumer.poll(100);
for (ConsumerRecord record : records) {
if(record.value()!=null){
TextAnalysisRequest textAnalysisObj = record.value();
if(textAnalysisObj!=null){
// Process record
requests.offer(textAnalysisObj);
}
}
}
}
catch(Exception ex){
LOGGER.error("Error in Full Consumer group worker", ex);
}
所以在 filename.en.xlf
中 while (!Thread.currentThread().isInterrupted()) {
try {
TextAnalysisRequest textAnalysisObj = requests.take();
PreProcessorUtil.submitPostProcessRequest(textAnalysisObj);
} catch (InterruptedException e) {
LOGGER.info("Process thread interrupted", e);
Thread.currentThread().interrupt();
} catch (Throwable t) {
LOGGER.warn("Unexpected throwable while processing.", t);
}
}
和法语,所以在 filename.fr.xlf 中如下
$builder->add(
'description',
null,
array('label' => 'form.description', 'required' => false)
);
希望这会对某人有所帮助