1

我一直在使用 stackoverflow 来学习很多关于 PHP 和 JS(包括 jquery)的知识,所以我一直倾向于谷歌,但我没有找到这个问题的确切答案

我有很多带有数字混合单词的字符串,例如:

“来自 12 人的 60 条评论,20% 的用户”

这是一个示例,但它可能要复杂得多(“word_one 45 word_two word_three 657 word_four 32% word_five USD20”)

用途是内容本地化:

我想检索数字并将它们保存到数组中-> 完成

我想将这些数字与我在数据库中已有的数字相匹配,即如果我有

zh:“来自 2 个人的 2 条评论,2% 的用户”

es:“2 个角色的 2 个评论,el 2% de los usuarios” -> 也完成了

现在我要做的是用原始字符串中的数字替换从数据库中提取的匹配字符串中的数字(它们都是“2”,因为我以这种方式保存它们,以避免复数单数问题)英语。例子:

我有这个英文:

“来自 12 人的 60 条评论,20% 的用户”

我在数据库中有这个:

zh:“来自 2 个人的 2 条评论,2% 的用户”

es:“2 个角色的 2 个评论,el 2% de los usuarios”

我想要这个西班牙语:

“12 个角色的 60 条评论,el 20% de los usuarios”

代码:

$pattern = '!\d+!';
$repv = preg_replace($pattern, "2", $v);

preg_match_all($pattern, $v, $matches);     
$matchesnb = count($matches, 1);
$pattarray = array_fill("0", "1", array_fill("0", ($matchesnb-1), $pattern));
$reptarget = preg_replace($pattarray, $matches, $dbdata[1]);

非常感谢提前!!

4

1 回答 1

0

为什么不将模板句子保存在数据库中以便与该sprintf()功能一起使用?

$str = array(
    'en' => '%d reviews from %d people, %01.1f%% of users',
    'es' => '%d comentarios de %d personas, el %01.1f%% de los usuarios'
);
$res = sprintf($str['es'],60,12,20);


编辑:句子中单词的顺序在所有语言中都不相同。出于这个原因,我认为给论点编号是一种更好的方法。我在下面的数组中添加了土耳其语选项,以显示 arg1 和 arg2 如何切换以及百分号如何更改位置(例如,它放在土耳其语中的数字之前,而不是之后)。

$str = array(
    'en' => '%1$d reviews from %2$d people, %3$01.1f%% of users',
    'es' => '%1$d comentarios de %2$d personas, el %3$01.1f%% de los usuarios',
    'tr' => '%2$d kullanıcıdan %1$d yorum, tüm kullanıcıların %%%3$01.1f\'si'
);
$res = sprintf($str['es'],60,12,20);
于 2012-12-05T03:17:18.580 回答