Estoy investigando horas y horas, pero no pude encontrar una forma clara y eficiente de hacerlo: /
Tengo un sitio web base de codeigniter en inglés y ahora tengo que agregar un idioma polaco. ¿Cuál es la mejor manera de hacer mi sitio en 2 idiomas dependiendo de la selección de visitantes?
¿Hay alguna forma de crear archivos de matriz para cada idioma y llamarlos en los archivos de vista dependiendo de la sesión desde la selección de idioma? No quiero usar la base de datos.
¡Apreciamos las ayudas! Me estoy quedando sin fecha límite: / ¡¡Gracias !!
arrays
session
codeigniter
multilingual
diseñador-probando-codificación
fuente
fuente
Respuestas:
¿Has visto la biblioteca de idiomas de CodeIgniter ?
En tu caso...
polish_lang.php
yenglish_lang.php
adentroapplication/language/polish
$lang['hello'] = "Witaj";
$this->lang->load('polish_lang', 'polish');
$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.
fuente
Además, para agregar el idioma a la sesión, definiría algunas constantes para cada idioma, luego me aseguraría de tener la biblioteca de sesión cargada automáticamente en config / autoload.php, o la cargaría cuando la necesite. Agregue el idioma deseado de los usuarios a la sesión:
$this->session->set_userdata('language', ENGLISH);
Entonces puedes agarrarlo en cualquier momento así:
$language = $this->session->userdata('language');
fuente
En el controlador agregue las siguientes líneas cuando haga el cunstructor
es decir, después
padre :: Controlador ();
agregue debajo de las líneas
$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 colóquelo en el directorio system \ application \ helpers
function label($label, $obj) { $return = $obj->lang->line($label); if($return) echo $return; else echo $label; }
para cada uno de los idiomas, cree un directorio con una abreviatura del idioma como en, nl, fr, etc., en system \ application \ languages
cree un archivo de idioma en el directorio anterior (respectivo) que contendrá la matriz $ lang con pares de etiquetas => 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 manera 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 etiquetas como se muestra a continuación
label ('bienvenido', $ esto);
O
label ('hola palabra', $ esto);
tenga en cuenta el espacio en hola y palabra, puede usarlo de esta manera también :)
cuando no hay una etiqueta definida en el archivo de idioma, simplemente imprimirá lo que pasó a la etiqueta de la función.
fuente
Secundo la respuesta de Randell.
Sin embargo, siempre se puede 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 de codeigniter.
Si desea utilizar la api de ipinfodb.com, puede agregar el archivo ip2locationlite.class.php a la carpeta de la biblioteca de la aplicación codeigniter y luego crear una función de modelo para hacer cualquier lógica geoip que necesite para su aplicación, como:
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; }
fuente
Para un uso más fácil, CI ha actualizado esto para que pueda usar
$this->load->helper('language');
y traducir texto
lang('language line');
y si desea deformarlo dentro de la etiqueta, use el parámetro opcional
lang('language line', 'element id');
Esto saldrá
// becomes <label for="form_item_id">language_key</label>
Para una buena lectura http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html
fuente
He utilizado la clase MY_Language de Wiredesignz con gran éxito.
Lo acabo de publicar en github, ya que parece que no puedo encontrar ningún 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 v2.
fuente
Al administrar los archivos reales, las cosas pueden desincronizarse con bastante facilidad, a menos que esté 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 idioma existentes (en formato PHP array, PHP Define, ini, po o .strings) o crear sus propias secciones desde cero y agregar contenido directamente a través del sistema.
String es totalmente gratis, así que compruébalo y dinos lo que piensas.
¡En realidad también está construido sobre Codeigniter! Consulte la versión beta en http://mygengo.com/string
fuente
Siga este https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
es simple y claro, también consulte el documento @ http://ellislab.com/codeigniter/user-guide/libraries/language.html
su manera más simple que
fuente
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 estoy usando el mecanismo interno habitual de CI
¡Oh, casi lo olvidas! en las vistas, utilizo botones, que configuran la cookie "idioma" con el idioma, preferido por el usuario.
Entonces, primero este código intenta detectar el "idioma preferido" configurado en el user`s useragent (navegador). Luego, el código intenta leer el "idioma" de las cookies. Y finalmente, el interruptor establece el idioma para la aplicación CI
fuente
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]; }
fuente
isset($lang[$language][$word]) == FALSE
sería suficiente asíisset($lang[$language][$word])
, porque isset solo devuelve verdadero y falso. Y tercero, cuando evalúe si algo es falso SIEMPRE use===
para verificar el tipo .Amigo, no se preocupe, si tiene alguna aplicación instalada en codeigniter y desea agregar algún paquete de idioma, simplemente siga estos pasos:
1. Agregue archivos de idioma en la carpeta application / language / arabic (agrego idioma árabe en sma2 construido en ci)
2. Vaya al archivo nombrado
setting.php
en application / modules / settings / views / setting.php . Aquí encuentras la matriz<?php /* $lang = array ( 'english' => 'English', 'arabic' => 'Arabic', // i add this here 'spanish' => 'Español'
Ahora guarda y ejecuta la aplicación. Ha funcionado bien.
fuente
setting.php
si ha utilizado alguna biblioteca o ayuda, por favor compártelo primero.