0

这是我的问题。我会尽量保持简洁:

我有一个 wab 页面,显示所选语言的文本,如下所示:

<p><?php echo $langFile->data->message; ?></p>

实际文本可能如下所示:

你好,%1。您有 %2 个订单。如果您 %forgot% 您的密码,请单击 %here% !

所以我必须编写一个函数,可以用某些文本替换(每次替换调用一次)%1 和 %2,并将 % 之间的单词替换为链接文本。这很棘手的原因是我可以拥有如下所示的文本:

bla bla %1,bla %yada yada %2 yada% bla bla bla。

所以在这里,该函数必须用可链接的文本替换%yada yada %2 yada%,并且当再次调用时,可以用另一个文本替换 %2。

我对编程有点陌生,所以我可以使用一些指针,因为如果可能的话,我不知道如何到达我想要的地方。提前非常感谢。

问候

4

3 回答 3

1

您可以在文本中使用字符串变量而不是%使用字符串变量(除非您正在编写某种动态的东西,允许人们像 CMS 一样添加自己的变量)。您可以使变量来自数据库或其他类似语言的数据库。例子:

$name = 'Bob';
$salutation = "Hello, $name.";
$order_count = '2';
if ($order_count == '1'){
  $ordertext = "You have $order_count order.";
} else{
  $ordertext = "You have $order_count orders.";
} 
$forgot = 'forgot';
$link = 'http://www.domain.com/reset/password';
$forgotphrase = "If you $forgot your password click <a href='$link'>here</a>!";

$message = $salutation.$ordertext.$forgotphrase;

输出

Hello, Bob. You have 2 orders. If you forgot your password click here!

更新

要在更大范围内执行此操作,您可以拥有一个名为“短语”的数据库表。

id,salutation,ordertext_plur,ordertext_sing,forgot,link,forgotphrase,language,updated

所以在 MySQL 中可能看起来像这样:

1,
'Hello, $name.',
'You have $order_count orders.',
'You have $order_count order.',
'forgot',
'http://www.domain.com/reset/password/en',
'If you $forgot your password click <a href='$link'>here</a>!',
'EN',
'2013-04-23 00:00:00'

您的 SQL 语句如下所示:

select * from phrasing where language='EN';

然后,您将根据输出分配适当的变量。您将不得不更多地考虑如何实现这一点以及数据库应该有多大。

其他想法您可能会考虑在您的页面上使用类似谷歌翻译小工具来翻译 HTML 代码,而不是将翻译硬编码到数据库中。他们的翻译数据库每天更新。我的一些大型国际客户使用它而不是花钱翻译成每种语言。此外,它还可以更轻松地更改一种语言的代码,而不必担心在其他语言中会丢失它。

于 2013-04-23T18:20:35.800 回答
1

试试这个: http: preg_replace //php.net/manual/es/function.preg-replace.php

可能%[1-9]适用于%1,%2%3其他%[A-Za-z ]+%

有一些重要的事情...对于其中一种情况,您应该将 % 更改为任何其他字符...这会使搜索更容易,因为...

这种情况很简单:Hello, %1. You have %2 orders. If you %forgot% your password click %here% ! 这不是:Bla bla %1, bla %yada yada %2 yada% bla bla bla. 但是,例如,这更容易:Bla bla #1, bla %yada yada #2 yada% bla bla bla.

于 2013-04-23T18:38:34.840 回答
1
$whatever = explode('%', $something);

然后像任何其他数组一样运行它。如果你能找到一个共同点并将其分解,你通常可以得到任何正则表达式或 if/then 的难题,以按照你的需要工作。事后逻辑实际上显露出来。

例如,我试图找到一种方法来保证删除所有脚本标签。老实说,没有人的正则表达式起作用。然后,我在 html 中找到了我可以使用的共同点。我想出了这个。它将保证剥离所有脚本标签。当然,脚本标签只是这么简单,因为它们不会嵌套。然而,这是一个很好的例子,说明了如何使用“爆炸逻辑”或“手风琴编码”来让你的头脑围绕问题并让它发生。

$h = explode('>', $html);

foreach($h as $k => $v){
    $v = trim($v);
    if(preg_match('/^(<script[.*]*)/ius', $v)){
        $counter = $k;//starting key of the script stored for later
        }elseif(preg_match('/([.*]*<\/script$)/ius', $v)){
            $script = $k - $counter;//difference between opening and closing tag
            $counter = 0;//reset counter for next script
            for($i = $script; $i >= 0; $i--){//now use the keys to empty everything in between
                $h[$k-$i] = '';
                }
            }           
        }
for($i = 0; $i <= count($h); $i++){
    if($h[$i] != ''){
        $ht[$i] = $h[$i];//clean out the blanks so when we implode it works right.
        }
    }
$html = implode('> ', $ht);//all scripts stripped.GUARANTEED

我相信你可以用同样的想法来做你想做的事情。尽管您的内部陈述会有所不同,但您将开始看到它如何更轻松地流动并实际显示您正在尝试做的事情的进展。

于 2013-04-23T18:10:25.260 回答