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

如何在PHP中为给定的语言环境输出适当的引号?,php,locale,quotes,quotation-marks,quotations,Php,Locale,Quotes,Quotation Marks,Quotations,最近,我对区域设置非常感兴趣,并为每个区域设置/语言组合输出正确的日期/时间格式、数字格式、金额格式、百分号等。我使用PHP的内置类,如NumberFormatter:和该页面右侧列表中的其他一些类,而不是自己解决这个问题并对其进行硬编码(这将花费我数百年的时间) 然而,后来我开始思考引号,以及我如何一直知道它们在不同语言和地区之间有很大的差异。因此,我搜索了所有的课程和在线课程,但奇怪的是,没有发现任何与输出报价相关的内容 那么,他们是不是把这件事漏掉了?还是我没有找到它?如果您浏览这篇维基百

最近,我对区域设置非常感兴趣,并为每个区域设置/语言组合输出正确的日期/时间格式、数字格式、金额格式、百分号等。我使用PHP的内置类,如NumberFormatter:和该页面右侧列表中的其他一些类,而不是自己解决这个问题并对其进行硬编码(这将花费我数百年的时间)

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

那么,他们是不是把这件事漏掉了?还是我没有找到它?如果您浏览这篇维基百科文章,您将看到有多少不同的引号/样式:

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

"This is a quote: 'And this is a nested quote.'"
对于存储在数据库中的实际“内容字符串”,我将在内部使用上述样式,但是当我为给定的语言环境实际输出它时,我希望它变成(例如,对于德语/德语):

基本上,我想要类似(这是根据NumberFormatter使用的语法组成的):

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


请告诉我,这样的东西存在于神秘的古老的PHP手册卷轴中,我就是没能找到它!以前很多次,我发现PHP中已经存在了15-20年,我从来没有想到过的功能都存在于其中,这会让我省去大量的麻烦……

引号应该始终是文本的一部分。如果该文本为英文,则应使用英文引号。如果是德语,应该用德语引号。将引号与包含它们的文本分开进行本地化没有什么意义。引用应该使用常规的gettext i18n机制进行本地化,作为对其所属句子进行本地化的一部分。@deceze我不理解消息的最后一部分,但问题是,内容是用英语编写的,然后我为不同的地区创建单独的“版本”。因为我在问题中提到的数字和所有其他东西都是本地化的,所以我也希望引号是本地化的。因此,它是有意义的,不是吗?你通常为观众定位。如果你的听众是说英语的,你可以用英语引号、英语时间格式、英语数字格式以及其他所有格式来制作你的文本。如果你的读者是说德语的,你可以用德语形式的引号和德语时间格式等来制作文本。我不太清楚你为什么想要英语文本,但要用德语形式的引号和德语时间格式等等。那到底是针对什么受众的?说英语的德国人?那些德国人也会习惯于英文引语,事实上,他们希望英文文本中有引语。过度本地化数字(而不是文本)可能会出现的一个问题是,我不确定数字“1234”是指一千二百三十四,还是一点二三四。这是使用德语数字格式只为我在英文文本,还是英文文本与英文数字?混合这样的引语也会很奇怪,尽管可能没有那么令人困惑。这就是为什么我把它定义为受众,而不是地理区域或语言。事实上,我自己更喜欢en_DE locales,因为我使用的大多数文本都是英语,我特别希望操作系统是“原始”英语;但我更喜欢德国日期格式,周围都是德国货币格式等。然而,我不希望也不喜欢英文文本中的德国式引号,这对我来说没有什么意义,我不记得曾经见过。因此:如果您通过翻译来本地化文本,那么您就可以使用它来本地化引号。否则,通常不会。引号应始终是文本的一部分。如果该文本为英文,则应使用英文引号。如果是德语,应该用德语引号。将引号与包含它们的文本分开进行本地化没有什么意义。引用应该使用常规的gettext i18n机制进行本地化,作为对其所属句子进行本地化的一部分。@deceze我不理解消息的最后一部分,但问题是,内容是用英语编写的,然后我为不同的地区创建单独的“版本”。因为我在问题中提到的数字和所有其他东西都是本地化的,所以我也希望引号是本地化的。因此,它是有意义的,不是吗?你通常为观众定位。如果你的听众是说英语的,你可以用英语引号、英语时间格式、英语数字格式以及其他所有格式来制作你的文本。如果你的读者是说德语的,你可以用德语形式的引号和德语时间格式等来制作文本。我不太清楚你为什么想要英语文本,但要用德语形式的引号和德语时间格式等等。那到底是针对什么受众的?说英语的德国人?那些德国人也会习惯于英文引语,事实上,他们希望英文文本中有引语。过度本地化数字(而不是文本)可能会出现的一个问题是,我不确定数字“1234”是指一千二百三十四,还是一点二三四。这是使用德语数字格式只为我在英文文本,还是英文文本与英文数字?混合这样的引语也会很奇怪,尽管可能没有那么令人困惑。这就是为什么我把它定义为受众,而不是地理区域或语言。我愿意
‚This is a quote: „And this is a nested quote.“‘
$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.“‘