PHP 中多语言 Web 应用程序的方法
Methods for multi-language web applications in PHP
我正在尝试构建一个具有多种语言的 Web 应用程序,只是为了我的 leisure/study。我想知道是否有比这更好的方法。
环境
仅 - PHP。目前还没有框架或库。
情况
英文和日文句子的词序不同,所以我认为像 $user_name . 'decapitated' . $enemy.
这样的简单串联行不通。
所以我想把所有的句子存入数据库。
+----+------------------------------------+-----------------------------------+
| id | en | ja |
+----+------------------------------------+-----------------------------------+
| 1 | $username has decapitated $enemy. | $username は $enemy の首をはねた! |
+----+------------------------------------+-----------------------------------+
里面的文本有一些变量,比如$username
,稍后将替换为str_replace()
。
$result = str_replace('$username', $username, $db->select('SELECT ja FROM `tb_language` WHERE id = 1;'))
问题
- 我试图找到更聪明的方法来扩展数据库文本中的变量,但我找不到。有什么建议吗?
- 上面的过程不可避免地会重复
str_replace()
个变量,而且似乎效率不高。有什么建议吗?
欢迎提出任何建议,并提前致谢。
使用printf()
/sprintf()
family of functions.
printf
、sprintf
、vsprintf
、(等等...) 函数用于格式化字符串等它们使您能够利用一套非常标准化的占位符逻辑。
您想在数据库中存储的内容如下所示:
%s has decapitated %s.
在PHP中,您可以使用printf()
函数(直接输出结果)或[=12=来格式化它] 函数 (其中 returns 结果).
$translated = sprintf("%s has decapitated %s.", "red", "blue");
echo $translated;
red has decapitated blue.
如果需要指定传入参数的顺序,可以通过指定位置来实现。 IE。英语 $format = "%1$s has decapitated %2$s."
和其他语言 $format = "%2$s has been decapitated by %1$s."
.
当您希望插入单词的顺序不同时,您可以使用此选项,但您希望在源代码中保持相同的顺序。
这两个 $format
字符串将通过相同的 sprintf($format, "red", blue")
调用正确格式化:
red has decapitated blue.
blue has been decapitated by red.
此处很好地展示了可能的格式设置选项:http://php.net/manual/en/function.sprintf.php
我正在尝试构建一个具有多种语言的 Web 应用程序,只是为了我的 leisure/study。我想知道是否有比这更好的方法。
环境
-
仅
- PHP。目前还没有框架或库。
情况
英文和日文句子的词序不同,所以我认为像 $user_name . 'decapitated' . $enemy.
这样的简单串联行不通。
所以我想把所有的句子存入数据库。
+----+------------------------------------+-----------------------------------+
| id | en | ja |
+----+------------------------------------+-----------------------------------+
| 1 | $username has decapitated $enemy. | $username は $enemy の首をはねた! |
+----+------------------------------------+-----------------------------------+
里面的文本有一些变量,比如$username
,稍后将替换为str_replace()
。
$result = str_replace('$username', $username, $db->select('SELECT ja FROM `tb_language` WHERE id = 1;'))
问题
- 我试图找到更聪明的方法来扩展数据库文本中的变量,但我找不到。有什么建议吗?
- 上面的过程不可避免地会重复
str_replace()
个变量,而且似乎效率不高。有什么建议吗?
欢迎提出任何建议,并提前致谢。
使用printf()
/sprintf()
family of functions.
printf
、sprintf
、vsprintf
、(等等...) 函数用于格式化字符串等它们使您能够利用一套非常标准化的占位符逻辑。
您想在数据库中存储的内容如下所示:
%s has decapitated %s.
在PHP中,您可以使用printf()
函数(直接输出结果)或[=12=来格式化它] 函数 (其中 returns 结果).
$translated = sprintf("%s has decapitated %s.", "red", "blue");
echo $translated;
red has decapitated blue.
如果需要指定传入参数的顺序,可以通过指定位置来实现。 IE。英语 $format = "%1$s has decapitated %2$s."
和其他语言 $format = "%2$s has been decapitated by %1$s."
.
当您希望插入单词的顺序不同时,您可以使用此选项,但您希望在源代码中保持相同的顺序。
这两个 $format
字符串将通过相同的 sprintf($format, "red", blue")
调用正确格式化:
red has decapitated blue.
blue has been decapitated by red.
此处很好地展示了可能的格式设置选项:http://php.net/manual/en/function.sprintf.php