从数组键翻译字符串不适用于多个段?

时间:2014-05-02 17:54:24

标签: php arrays foreach str-replace

我只需要使用一系列键及其翻译进行简单的字符串翻译(url)。

尝试这样:

function ruta_iso( $ruta ) {
    $slugs = array(
        'noticia' => array(
            'es' => 'noticia',
            'en' => 'post'
        ),
        'pregunta' => array(
            'es' => 'pregunta',
            'en' => 'question'
        ),
        'consejo' => array(
            'es' => 'consejo',
            'en' => 'tip'
        ),
        'noticias' => array(
            'es' => 'noticias',
            'en' => 'news'
        )
    );


    $idioma_defecto = 'es';
    $idioma = 'en' ;

    if ( ($idioma != $idioma_defecto) && ($ruta == '/') ) {
        return "/$idioma";
    } else if( $idioma !=  $idioma_defecto ){
        foreach($slugs as $key => $slug){
            if ( ( strpos("/$key/", $ruta ) === false ) ){
            }else {
                $ruta = str_replace( "/$key/", '/'.$slug[$idioma].'/' , $ruta );

            }
        }
        $ruta = "/$idioma$ruta"; 
    } else {

    }
    return $ruta;
}

echo '-------Ruta Iso '.ruta_iso('/noticias/'); /* Works! */

echo ' -------Ruta Iso '.ruta_iso('/noticias/noticia/'); /* Nope.. */

可以在这里测试:

http://codepad.org/3w3Vmncg

似乎是为一个子弹做了这个工作,但是如果不止一个,那就不行了,甚至:

echo ' -------Ruta Iso '.ruta_iso('/noticias/blabla/'); /* Nope.. */

所以我不确定如何尝试,我的意思是,我没有打破foreach,为什么不检查每个字符串?

任何toghts?

1 个答案:

答案 0 :(得分:1)

您也可以尝试这样做:

function ruta_iso( $ruta = '') {
    $slugs = array(
        'noticia' => array(
            'es' => 'noticia',
            'en' => 'post'
        ),
        'pregunta' => array(
            'es' => 'pregunta',
            'en' => 'question'
        ),
        'consejo' => array(
            'es' => 'consejo',
            'en' => 'tip'
        ),
        'noticias' => array(
            'es' => 'noticias',
            'en' => 'news'
        )
    );

    $idioma_defecto = 'es';
    $idioma = 'en' ;

    foreach( explode('/',  $ruta) as $data){
    if( !empty($data) ){

        if( array_key_exists($data, $slugs)){
            $result[] = $slugs[$data][$idioma];
        }else{
            $result[] = $data;
        }
    }
}
    $result = '/'.$idioma.'/'.implode('/', $result).'/';

    return $result;
}

echo '-------Ruta Iso '.ruta_iso('/noticias/');

echo ' -------Ruta Iso '.ruta_iso('/noticias/noticia/');

echo '-------Ruta Iso '.ruta_iso('/noticias/noticia/the-new');

结果:

-------Ruta Iso /en/news/ -------Ruta Iso /en/news/post/
-------Ruta Iso /en/news/post/the-new/