Traducir desde la base de datos y mostrarlos en un dropDownlist

Traducir desde la base de datos y mostrarlos en un dropDownlist


En un caso muy especial se me presentó el caso de un proyecto en el cual se tenían que traducir los datos que provenían desde base de datos, en este caso fueron los catálogos, por ejemplos estatus de un proceso, en este caso eran muchos selects y hacer una función manual me parecía algo tardado, por lo que buscando encontré ésta solución. 

Para poder realizar éste cambio ya debes de tener instalada la traducción en tu proyecto, para saber cómo puedes consultar éste tutorial Como agregar otro idioma en Yii2

Paso #1 Agregar clase a componentes

Crea una clase vacía dentro de la carpeta raíz del proyecto en "/components/" si no tienes la carpeta la puedes crear, la clase la puedes nombrar así "ArrayHelper.php" por lo que la ruta final debe quedar así: "/components/ArrayHelper.php" y dentro pondrás este código.

// --------------------------------------------------------------------------------------------------------------
namespace yii\helpers;
use Yii;

class ArrayHelper extends BaseArrayHelper
{    
    public static function map($array, $from, $to, $group = null){

        $result = [];
        foreach ($array as $element) {
            $key = static::getValue($element, $from);
            $value = static::getValue($element, $to);
            if ($group !== null) {
                $result[static::getValue($element, $group)][$key] = $value;
            } else {                
                $result[$key] = Yii::t('app/catalog',$value); //Agregar traduccion
            }
        }

        return $result;
    }    
}


Lo que hace esta clase, es heredar de la clase del core de Yii BaseArrayHelper y extendemos el método map() para que hacer lo que nosotros queramos, es importante destacar que ésto afectará a todo la app o proyecto, la ligea que agregamos es esta: 

$result[$key] = Yii::t('app/catalog',$value); //Agregar traduccion

En mi caso la categoría de la traducción es: 

'app/catalog'



Paso #2 Registrar 

Deberás de ir al index.php del proyecto, y después de esta linea:

require(__DIR__ . '/../habitapp/vendor/yiisoft/yii2/Yii.php');

 y agregar está línea 

Yii::$classMap['yii\helpers\ArrayHelper'] = '@app/components/ArrayHelper.php';

Con ésto estarás registrando la clase extendida al proyecto. 

Y eso es todo. Ahora en todos lugares donde utilices el método "ArrayHelper::map()" utilizará el método que acabas de extender. 

Es todo y agradezco sus comentarios.


Fuentes:

Comentarios

Aprende Yii2


Lo más Visto

Tutorial de implementación de calendario de rango de fechas con Karkit en gridView

Guía rápida para uso de widget kartik para select para formulario

Cómo incluir una vista dentro de un modal

Google Plus desaparecerá el 4 de Abril de 2019

Crear fomulario HTML con checkbox sin Active Record

hostinger

ventana bienvenida