如何在 PHP 中为给定的语言环境输出适当的引号?

How do I output the appropriate quotation marks for a given locale in PHP?

提问人: 提问时间:2/3/2020 更新时间:2/3/2020 访问量:265

问:

最近,我一直在疯狂地研究语言环境,并为每个语言环境/语言组合输出正确的日期/时间格式、数字格式、金钱和格式、百分号等。我没有自己弄清楚并硬编码它,这需要我花费数百年的时间,而是使用 PHP 的内置类,例如 NumberFormatter: https://www.php.net/NumberFormatter 以及该页面上右侧列表中的其他一些类。

然而,后来我开始思考引号,以及我一直知道它们在语言和地区之间有很大差异。因此,我在网上搜索了整个班级,但奇怪的是,没有发现任何与输出报价相关的内容。

那么,他们只是忽略了这一点吗?还是我只是没有找到它?如果你浏览这篇维基百科文章,你会看到有多少个不同的引号/样式:https://en.wikipedia.org/wiki/Quotation_mark

就像我的应用程序现在根据语言环境正确输出“所有内容”一样,我现在也希望能够以正确的方式输出报价。对我来说,仅仅使用标准的英语风格已经不够好了:

"This is a quote: 'And this is a nested quote.'"

对于存储在数据库中的实际“内容字符串”,我将在内部使用上述样式,但是当我实际为给定的区域设置输出它时,我希望它变为(例如,对于德国/德语):

‚This is a quote: „And this is a nested quote.“‘

从本质上讲,我想要这样的东西(这是根据用于 NumberFormatter 的语法组成的):

$a = new QuoteFormatter( 'de_DE', QuoteFormatter::MOSTCOMMON );
echo $a>format('"This is a quote: \'And this is a nested quote.\'"');

它将输出(因为指定了德国/德语):

‚This is a quote: „And this is a nested quote.“‘

请告诉我,在PHP手册的神秘古代卷轴中,有这样的东西存在,我只是找不到它!以前很多次,我发现PHP中的功能已经存在了15-20年,而我从未想过这些功能在那里,并且会为我省去大量的头痛......

PHP 语言环境 引号

评论

3赞 deceze 2/3/2020
引号应始终是文本的一部分。如果该文本是英文的,则应使用英文引号。如果是德语,则应使用德语引号。将引号与它们所包含的文本分开本地化是没有意义的。引号应该本地化,作为本地化它们所属句子的一部分,使用常规的 gettext i18n 机制。
0赞 2/3/2020
@deceze 我不明白你消息的最后一部分,但问题是,内容是用英语写的,然后我为不同的语言环境创建单独的“版本”。由于我在问题中提到的数字和所有其他东西都是本地化的,所以我也希望引号本地化。因此,这确实是有道理的,不是吗?
0赞 deceze 2/3/2020
您通常会针对受众进行本地化。如果你的听众是说英语的,你可以用英语引号、英语时间格式和英语数字格式以及所有其他格式使你的文本成为英语。如果你的听众是讲德语的,你可以用德语风格的引号和德语时间格式等使文本成为德语。我不太确定为什么你想要英文文本,但要有德语风格的引号和德语时间格式等等。这究竟是针对哪些受众的?说英语的德国人?然后,这些德国人也会习惯于英文引文,并且实际上会期望它们用英文文本引用。
1赞 2/3/2020
@deceze “区域设置”的整个概念包括语言和地理区域的组合。我提到的所有事情都高度依赖于这两者。你说的话是没有意义的,除非你把一个语言等同于语言,或者相信每个地理区域都有自己的语言,而且只有一种语言,具有相同的约定。这些都不是真的。坦率地说,我不明白你为什么会这样回答。
1赞 deceze 2/3/2020
这就是为什么我将其定义为受众,而不是地理区域或语言。事实上,我自己更喜欢en_DE语言环境,因为我使用的大部分文本都是英语,而且我特别希望操作系统是“原始”英语;但我更喜欢德国日期格式,并且被德国货币格式等所包围。但是,我不期望也不喜欢英文文本中的德语风格引用,这对我来说意义不大,而且我不记得曾经见过。因此:如果你通过翻译对文本进行本地化,那么你就用它来本地化引文。否则,您通常不会这样做。

答: 暂无答案