我需要格式化本地化字符串的一部分。让我们假设我想参与其中一部分"大胆"并且让我们将HTML视为使用的标记。
在这个例子中我需要" 梅西百货"大胆:
$en = "At %1$s, I bought %2$s.";
$es = "Compré %2$s en %1$s."
printf($en, "Macy's", "a cup"); // prints: At Macy's, I bought a cup.
printf($es, "Macy's", "una tasa"); // prints: Compré una tasa en Macy's.
在字符串中使用标记语言会使转换者感到困惑,因为他们不知道那是什么,或者可以说它打破了SoC:
$en = "At <b>%1$s</b>, I bought %2$s.";
$es = "Compré %2$s en <b>%1$s</b>."
在标记部分周围拆分字符串会创建一个难以翻译的小字符串。
$en1 = 'At';
$en2 = ', I bought %2$s.';
print($en1."<b>"."Macy's"."</b>")
printf($en2, "a cup");
// prints: At </b>Macy's</b>, I bought a cup.
问:实现这一目标的最佳方式是什么?
谢谢。
答案 0 :(得分:1)
字符串中的标记。
当然,译者可能不知道它是什么,但他们也不会神奇地知道%1$s
。有人必须告诉他们,所以在&#34;中添加几个标签;这是你不应该搞砸的神奇东西&#34;列表不是什么大问题。
在这里,关注点分离也没有真正的问题:你已经决定文本需要强调某个部分。你需要一种方法来描述强调的去向;可以使用一小部分HTML来做到这一点。如果你没有使用HTML,你仍然需要一些其他方法来解决问题,这种方式可能会更糟糕。
我也不能过分强调,连接字符串形成一个句子是一种i18n练习,你将来会深深地后悔。