la mejor manera de hacer que codeigniter sitio web en varios idiomas. Llamar desde lang arrays depende de lang session?

Estoy investigando horas y horas, pero no pude encontrar una manera clara y eficiente de hacerlo: /

Tengo un sitio web base codeigniter en inglés y ahora tengo que agregar un idioma polaco. ¿Cuál es la mejor manera de hacer que mi sitio esté en 2 idiomas según la selección de visitantes?

¿Hay alguna forma de crear archivos de matriz para cada idioma y llamarlos en archivos de vista depende de la Sesión de selección de idioma? No quiero usar la base de datos.

Apreciar ayuda! Me estoy quedando sin fecha límite: / gracias !!

¿Has visto la biblioteca de idiomas de CodeIgniter ?

La clase de lenguaje proporciona funciones para recuperar archivos de idiomas y líneas de texto con fines de internacionalización.

En su carpeta del sistema CodeIgniter encontrará un idioma llamado que contiene conjuntos de archivos de idioma. Puede crear sus propios archivos de idioma según sea necesario para mostrar errores y otros mensajes en otros idiomas.

Los archivos de idioma generalmente se almacenan en su directorio de sistema / idioma. Alternativamente, puede crear una carpeta llamada idioma dentro de la carpeta de la aplicación y almacenarlos allí. CodeIgniter se verá primero en su aplicación / directorio de idiomas. Si el directorio no existe o no se encuentra el idioma especificado, CI buscará en su sistema / carpeta de idioma global.

En tu caso…

  • necesitas crear un polish_lang.php y polish_lang.php dentro de la application/language/polish
  • luego crea tus claves dentro de ese archivo (ej. $lang['hello'] = "Witaj";
  • luego cárguelo en su controlador como $this->lang->load('polish_lang', 'polish');
  • luego busque la línea como $this->lang->line('hello'); Simplemente almacene el valor de retorno de esta función en una variable para que pueda usarla en su vista.

Repita los pasos para el idioma inglés y todos los demás idiomas que necesite.

También para agregar el idioma a la sesión, definiría algunas constantes para cada idioma, luego me aseguro de tener la biblioteca de sesión cargada automáticamente en config / autoload.php, o la cargues siempre que la necesites. Agregue el idioma deseado por los usuarios a la sesión:

 $this->session->set_userdata('language', ENGLISH); 

Entonces puedes agarrarlo en cualquier momento como este:

 $language = $this->session->userdata('language'); 

En el controlador agrega las siguientes líneas cuando hagas el cunstructor

es decir, después

padre :: Controlador ();

agregar líneas debajo

  $this->load->helper('lang_translate'); $this->lang->load('nl_site', 'nl'); // ('filename', 'directory') 

Cree el archivo auxiliar lang_translate_helper.php con la siguiente función y póngalo en el directorio system \ application \ helpers

 function label($label, $obj) { $return = $obj->lang->line($label); if($return) echo $return; else echo $label; } 

para cada idioma, cree un directorio con una abreviatura de idioma como en, nl, fr, etc., en system \ application \ languages

crear un archivo de idioma en el directorio superior (respectivo) que contendrá $ lang array holding pairs label => language_value como se indica a continuación

nl_site_lang.php

 $lang['welcome'] = 'Welkom'; $lang['hello word'] = 'worde Witaj'; 

en_site_lang.php

 $lang['welcome'] = 'Welcome'; $lang['hello word'] = 'Hello Word'; 

puede almacenar varios archivos para el mismo idioma de forma diferente según el requisito; por ejemplo, si desea un archivo de idioma separado para administrar el backend (sección de administrador), puede usarlo en el controlador como $ this-> lang-> load (‘nl_admin’, ‘ nl ‘);

nl_admin_lang.php

 $lang['welcome'] = 'Welkom'; $lang['hello word'] = 'worde Witaj'; 

y finalmente para imprimir la etiqueta en el idioma deseado, acceda a las tags de la siguiente manera a la vista

label (‘welcome’, $ this);

O

label (‘hello word’, $ this);

nota el espacio en hola y palabra que puedes usar así también 🙂

Cuando no haya una etiqueta definida en el archivo de idioma, simplemente imprimirá lo que pasó a la etiqueta de la función.

Yo segundo la respuesta de Randell.

Sin embargo, siempre se podría integrar un GeoIP como http://www.maxmind.com/app/php o http://www.ipinfodb.com/ . Luego puede guardar los resultados con la clase de sesión codeigniter.

Si desea utilizar la aplicación ipinfodb.com, puede agregar el archivo ip2locationlite.class.php a la carpeta de la biblioteca de aplicaciones codeigniter y luego crear una función de modelo para hacer la lógica de geoap que necesite para su aplicación, como por ejemplo:

 function geolocate() { $ipinfodb = new ipinfodb; $ipinfodb->setKey('API KEY'); //Get errors and locations $locations = $ipinfodb->getGeoLocation($this->input->ip_address()); $errors = $ipinfodb->getError(); //Set geolocation cookie if(empty($errors)) { foreach ($locations as $field => $val): if($field === 'CountryCode') { $place = $val; } endforeach; } return $place; } 

Para un uso más fácil, CI lo ha actualizado para que pueda usarlo

 $this->load->helper('language'); 

y para traducir texto

 lang('language line'); 

y si quiere deformarlo dentro de la etiqueta, use el parámetro opcional

 lang('language line', 'element id'); 

Esto producirá

 // becomes  

Para leer bien http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html

Al administrar los archivos reales, las cosas pueden desajustarse con bastante facilidad a menos que estés realmente atento. Así que hemos lanzado un servicio gratuito (beta) llamado String que le permite realizar un seguimiento de sus archivos de idioma fácilmente y colaborar con traductores.

Puede importar archivos de idiomas existentes (en PHP array, PHP Define, ini, po o .strings) o crear sus propias secciones desde cero y agregar contenido directamente a través del sistema.

La cadena es totalmente gratis, así que por favor échale un vistazo y dinos lo que piensas.

¡En realidad también está basado en Codeigniter! Consulte la versión beta en http://mygengo.com/string

He utilizado la clase MY_Language de Wiredesignz con gran éxito.

Acabo de publicarlo en github, ya que no puedo encontrar rastro de él en ninguna parte.

https://github.com/meigwilym/CI_Language

Mis únicos cambios son cambiar el nombre de la clase a CI_Lang, de acuerdo con los nuevos cambios de v2.

Estoy usando dicho código en config.php:

 $lang = 'ru'; // this language will be used if there is no any lang information from useragent (for example, from command line, wget, etc... if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); $tmp_value = $_COOKIE['language']; if (!empty($tmp_value)) $lang = $tmp_value; switch ($lang) { case 'ru': $config['language'] = 'russian'; setlocale(LC_ALL,'ru_RU.UTF-8'); break; case 'uk': $config['language'] = 'ukrainian'; setlocale(LC_ALL,'uk_UA.UTF-8'); break; case 'foo': $config['language'] = 'foo'; setlocale(LC_ALL,'foo_FOO.UTF-8'); break; default: $config['language'] = 'english'; setlocale(LC_ALL,'en_US.UTF-8'); break; } 

…. y luego uso el mecanismo interno usual de CI

o, casi olvidar! en las vistas, yo uso botones, que señalan el ‘idioma’ de la cookie con el idioma, preferido por el usuario.

Por lo tanto, primero este código intenta detectar el “idioma preferido” establecido en userragent (browser) del usuario. Luego codifique para intentar leer el ‘idioma’ de la cookie. Y finalmente: cambiar el idioma de los conjuntos para la aplicación de CI

puedes hacer una función como esta

 function translateTo($language, $word) { define('defaultLang','english'); if (isset($lang[$language][$word]) == FALSE) return $lang[$language][$word]; else return $lang[defaultLang][$word]; } 

Amigo, no te preocupes, si tienes alguna aplicación instalada integrada en codeigniter y quieres agregar un paquete de idioma solo sigue estos pasos:

1. Agregue archivos de idioma en la aplicación de la carpeta / language / arabic (agrego arabic lang en sma2 built in ci)

2. Vaya al archivo llamado setting.php en application / modules / settings / views / setting.php . Aquí encontrarás la matriz

  'English', 'arabic' => 'Arabic', // i add this here 'spanish' => 'Español' 

Ahora guarda y ejecuta la aplicación. Funcionó bien.