我有一个混合html和php的php网站。 例如:
<html>
hello <?=$username?>
我需要事实上保留文本。我不想要一个经典的解决方案,例如创建reosurce字符串并替换它们,例如:
<html>
<?=echo $helloString?> <?=$username?>
实际上是一种“自动脚本”,它将在运行时替换所有文本资源。所以我保留现有网站,并在开始时添加一些脚本。
<? include("translation_module.php?")?>
<html>
hello <?=$username?>
这个translation_module.php将“hello”替换为“bonjour”。
实现这一目标的任何线索?
我不关心语法,货币,多元问题。
由于
答案 0 :(得分:5)
从理论上讲,这可能适用于这种简单的案例,但它在实践中并不适用。包含注入变量但仍需要翻译的字符串呢?例如:
You have <?= $inboxCount?> messages in your inbox
这不能翻译成语法强制要求的任何语言。 “消息”必须出现在号码之前。请记住,这只是一个简单的非常简单的例子;任何花费任何时间使用i18n的人都会告诉你,如果你想要一个合适的解决方案,你必须将所有字符串,独立于外部。
答案 1 :(得分:0)
语法明智,它无法发挥作用,因为某些作品只是通过翻译以主要语言正确翻译而变得复杂,并且如@Jon所述,语法有时要求将值放在不同的位置。
我建议你做的是,用多种语言编写或翻译你的主要内容,当用户指定一种语言时,你的网站就会跳过,主要是明确的内容。我怀疑你是否有一个论坛,你希望每个人都以(例如)三种语言发表文章。
由于语法的原因,你迁移的一些东西也与if else语句有关。
答案 2 :(得分:-2)
你可以通过使用一些对象来实现这一点。
<?
class LocalizationFR{
public function getHelloMessage(){
return "bonjour";
}
}
class LocalizationEN{
public function getHelloMessage(){
return "Hello";
}
}
class Localization{
public function setHelloMessage(){
array_push('messages', array('locale' => 'fr', 'message' => LocalizationFR::getHelloMessage()));
array_push('messages', array('locale' => 'en', 'message' => LocalizationEN::getHelloMessage()));
}
public static function getHelloMessage($locale){
return $this->messages[$locale];
}
}
而且,在您的代码中,只是
<?php echo Localization::getHelloMessage('fr'); ?>
对吗?