2011-08-07 71 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]) 

在這種情況下,你將不再有如果。