Как сделать этот php-if-statemeent короче и более пригодным для использования? - PullRequest
1 голос
/ 07 августа 2011

Мне кажется, я слишком много повторяю в следующем операторе 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 ]

1 голос
/ 07 августа 2011

Ну, во-первых, вам не нужно заключать каждую строку в теги <?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 .

1 голос
/ 07 августа 2011

Вы можете использовать корпус переключателя, как показано ниже

<?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 голосов
/ 07 августа 2011

Короче, если он существует в 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])

В этом случае у вас больше не будет, если.

0 голосов
/ 07 августа 2011

Использовать массив.

$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 голосов
/ 07 августа 2011

Я бы использовал массив в качестве таблицы поиска:

<?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>
...