2011-08-07 33 views
1

我觉得我不停地重复太多,可在以下if语句:如何让这个php-if-statemeent更短,更容易被修复?

<?php $current_language = get_bloginfo('language'); ?> 
<div id="next"> 
    <?php if ($current_language == 'es-ES') : ?> 
     <?php next_post_link('%link', 'Proyecto Siguiente ' . _x('', 'next post link', 'twentyten') . ''); ?> 
    <?php elseif ($current_language == 'zh-TW') : ?> 
     <?php next_post_link('%link', '下一個項目 ' . _x('', 'next post link', 'twentyten') . ''); ?> 
    <?php elseif ($current_language == 'zh-CN') : ?> 
     <?php next_post_link('%link', '下一个项目 ' . _x('', 'next post link', 'twentyten') . ''); ?> 
    <?php else : ?> 
     <?php next_post_link('%link', 'Next Project ' . _x('', 'next post link', 'twentyten') . ''); ?> 
    <?php endif; ?> 
</div> 
<div id="prev"> 
    <?php if ($current_language == 'es-ES') : ?> 
     <?php previous_post_link('%link', '' . _x('', 'previous post link', 'twentyten') . ' Proyecto Anterior'); ?> 
    <?php elseif ($current_language == 'zh-TW') : ?> 
     <?php previous_post_link('%link', '' . _x('', 'previous post link', 'twentyten') . ' 上一個項目'); ?> 
    <?php elseif ($current_language == 'zh-CN') : ?> 
     <?php previous_post_link('%link', '' . _x('', 'previous post link', 'twentyten') . ' 上一个项目'); ?> 
    <?php else : ?> 
     <?php previous_post_link('%link', '' . _x('', 'previous post link', 'twentyten') . ' Previous Project'); ?> 
    <?php endif; ?> 
</div> 

(PHP代码的重复是一个WordPress的约定,我认为)。

我不知道是否有没有重复previous_post_linknext_post_link功能的一种方式?

+0

我不认为这是一个不必要的使用php标签的惯例,而非方便。所以程序员可以轻松地复制粘贴代码而无需打开和关闭标签。复制粘贴生成(; –

+0

是的,它看起来像是Wordpress的,这不是一个约定,你不必重复标签,所以我会丢失多余的标签,并使用一个数组,如下面的答案中所建议的。它应该导致更清洁的代码 – CodeVirtuoso

+0

@Freelancer好吧我会尝试 – alexchenco

回答

1

的一件事是,你不必每包线<?php ... ?>标签。而且因为你重复同样的事情相当多,你可以使用,而不是一个数组:

<div id="next"> 
<?php 
$current_language = get_bloginfo('language'); 
$translations = array( 
    'es-ES' => 'Proyecto Siguiente', 
    'zh-TW' => '下一個項目', 
    'zh-CN' => '下一个项目', 
    'en-GB' => 'Next Project' 
); 

if(!isset($translations[ $current_language ])) { 
    $current_language = 'en-GB'; 
} 

next_post_link('%link', $translations[ $current_language ].' ' . _x('', 'next post link', 'twentyten') . ''); 
?> 

如果你在翻译你的应用程序像这样每个字符串,它可能是值得考虑的一个更一般的系统背后它就像gettext

+0

我使用的是gettext,但我不知道如何将这些函数应用到这些函数中 – alexchenco

+0

'in_array'在这里是错误的函数 –

+0

@Felix哎呀,你说得对,我会编辑帖子。 – JJJ

1

你可以使用开关的情况下,如下

<?php $current_language = get_bloginfo('language'); ?> 
<div id="next"> 
<?php 
switch($current_language){ 
    case 'es-ES': 
     next_post_link('%link', 'Proyecto Siguiente ' . _x('', 'next post link', 'twentyten') . '');  
    break; 

    case 'zh-TW': 
     next_post_link('%link', '下一個項目 ' . _x('', 'next post link', 'twentyten') . ''); 
    break; 

    case 'zh-CN': 
     next_post_link('%link', '下一个项目 ' . _x('', 'next post link', 'twentyten') . ''); 
    break; 

    default: 
     next_post_link('%link', 'Next Project ' . _x('', 'next post link', 'twentyten') . ''); 
} 
?> 
0

使用数组。

$translations = array(
    'es-ES' => array(
    'next post' => 'Proyecto Siguiente %s', 
    ... 
), 
    'zh-TW' => array(
    ... 
), 
    ... 
    'default' => array(
    'next post' => 'Next Project %s', 
    ... 
) 
); 

... 

$language = 'default'; 
if (array_key_exists($translations, $current_language)) 
{ 
    $language = $current_language; 
}; 

... 

next_post_link('%link', sprintf($translations[$language]['next post'], 
    _x('', 'next post link', 'twentyten') . '')); 

这样做,你也可以移动翻译成一个单独的文件,然后建立从每一块阵列片。

0

我会用数组作为查找表:

<?php 
    $languages = array(
     'es-ES' => array('next' => 'Proyecto Siguiente %s', 'prev' => '...'), 
     //... 
     'en' => array('next' => 'Next Project %s', 'prev' => '%s Previous Project') 
    ); 

    $lang = get_bloginfo('language'); 
    $lang = isset($languages[$lang]) ? $lang : 'en'; 
?> 

<div id="next"> 
<?php next_post_link('%link', sprintf($languages[$lang]['next'], _x('', 'next post link', 'twentyten'))); ?> 
</div> 

<div id="pref"> 
<?php previous_post_link('%link', sprintf($languages[$lang]['prev'], _x('', 'previous post link', 'twentyten'))); ?> 
</div> 
0

有一个,如果短于existsin PHP http://php.net/manual/en/control-structures.if.php

(condition) ? true : false; 

但对于您的问题,你可能要考虑标签的数组。这里是一个例子

$currrentLanguage = 1; 
$Label = new Array('NextProject' => New Array('New Project','Nouveau Projet', 'Blah blah')); 

echo($Label ['NextProject'][$currrentLanguage]) 

在这种情况下,你将不再有如果。