如何使这个php-if语句更短,更可读?

时间:2011-08-07 10:10:46

标签: php if-statement code-generation

我想我在以下if语句中重复了太多:

<?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_link next_post_link 功能?

5 个答案:

答案 0 :(得分: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' ) . '' ); 
}
?>

答案 1 :(得分: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

答案 2 :(得分: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' ) . '' ));

执行此操作,您还可以将翻译移动到单独的文件中,然后逐个构建阵列。

答案 3 :(得分: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>

答案 4 :(得分:0)

如果存在于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])

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