[contribucion] Multlenguaje COOKIES+PHP

jptosso

New Member
Messages
200
Reaction score
0
Points
0
aqui les dejo mi logro xD por lo que e visto funciona muy bien.

PHP:
<?php
$dir_idioma_default = "idioma/es.php";
if($_COOKIE[lang]=="")
{
include($dir_idioma_default);
}
else
{
if(isset($_GET[lang]))
{
setcookie("lang", $_GET[lang], time()+3600); //cookie de una hora
}
$root="idiomas/".$_COOKIE[lang].".php";
if(file_exists($root)) {
    include("$root");
} 
else
{
include($dir_idioma_default);
}
}
?>

en los idiomas pueden usar 2 opciones que les recomiendo, arrays o defines.

ARRAY:
PHP:
<?php
$body['bienvenido']="hola";
$body['despedida']="chao";
?>

y en el documento a mostrar en pantalla colocan simplemente:
PHP:
<?php
echo $body['bienvenido'];
?>
eso mostrara "hola" sin comillas(")

y la otra es con define:
PHP:
<?php
define(_BIENVENIDO, "hola");
?>

y la muestras en pantalla con:

PHP:
<?php
echo _BIENVENIDO;
?>

eso mostrara "hola" en pantalla (sin comillas ("))

espero que les sirvaa :)

salu2
 

figu120

New Member
Messages
921
Reaction score
0
Points
0
muy buena aportacion esta buena es la misma que usa los cms..

lo q ami megustaria saber es como el php puede distingir las ip para q tenga el idio q es ej..

ingreso con una ip colombiana tons me sale idioma español
ingreso con una ip inglesa tons me slae el idioma ingres
ip alema me salga en alemas

se q se llama geoip eso lo usa mercadolibre

saludes
 

jptosso

New Member
Messages
200
Reaction score
0
Points
0
por lo que yo se, con php u javascript uno puede extraer muchos datos de la pc del usuario, ejemplo:
navegador
ip
sistema operativo
version del navegador y del os
lenguaje del usuario
cuentas de email xD
y otras mas, voy a buscar a ver si encuentro algo

salu2

___________

jeje ya lo encontre
PHP:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]

ahi con eso obtienes el idioma del usuario

salu2

PD:
encontre esto, quisas te sirva:

PHP:
<?php

function get_languages( $feature, $spare='' )
{
	// get the languages
	$a_languages = languages();
	$index = '';
	$complete = '';
	$found = false;// set to default value
	//prepare user language array
	$user_languages = array();

	//check to see if language is set
	if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) ) 
	{
		//explode languages into array
		$languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
		$languages = explode( ",", $languages );

		foreach ( $languages as $language_list )
		{
			// pull out the language, place languages into array of full and primary
			// string structure: 
			$temp_array = array(); 
			// slice out the part before ; on first step, the part before - on second, place into array
			$temp_array[0] = substr( $language_list, 0, strcspn( $language_list, ';' ) );//full language
			$temp_array[1] = substr( $language_list, 0, 2 );// cut out primary language
			//place this array into main $user_languages language array
			$user_languages[] = $temp_array;
		}

		//start going through each one
		for ( $i = 0; $i < count( $user_languages ); $i++ )
		{
			foreach ( $a_languages as $index => $complete ) 
			{
				if ( $index == $user_languages[$i][0] )
				{
					// complete language, like english (canada) 
					$user_languages[$i][2] = $complete;
					// extract working language, like english
					$user_languages[$i][3] = substr( $complete, 0, strcspn( $complete, ' (' ) );
				}
			}
		}
	}
	else// if no languages found
	{
		$user_languages[0] = array( '','','','' ); //return blank array.
	}

	// return parameters
	if ( $feature == 'data' )
	{
		return $user_languages;
	}

	// this is just a sample, replace target language and file names with your own.
	elseif ( $feature == 'header' )
	{
		switch ( $user_languages[0][1] )// get default primary language, the first one in array that is
		{
			case 'en':
				$location = 'english.php';
				$found = true;
				break;
			case 'sp':
				$location = 'spanish.php';
				$found = true;
				break;
			default:
				break;
		}
		if ( $found )
		{
			header("Location: $location"); 
		}
		else// make sure you have a default page to send them to
		{
			header("Location: default.php"); 
		}
	}
}

function languages()
{
// pack abbreviation/language array
// important note: you must have the default language as the last item in each major language, after all the
// en-ca type entries, so en would be last in that case
	$a_languages = array(
	'af' => 'Afrikaans',
	'sq' => 'Albanian',
	'ar-dz' => 'Arabic (Algeria)',
	'ar-bh' => 'Arabic (Bahrain)',
	'ar-eg' => 'Arabic (Egypt)',
	'ar-iq' => 'Arabic (Iraq)',
	'ar-jo' => 'Arabic (Jordan)',
	'ar-kw' => 'Arabic (Kuwait)',
	'ar-lb' => 'Arabic (Lebanon)',
	'ar-ly' => 'Arabic (libya)',
	'ar-ma' => 'Arabic (Morocco)',
	'ar-om' => 'Arabic (Oman)',
	'ar-qa' => 'Arabic (Qatar)',
	'ar-sa' => 'Arabic (Saudi Arabia)',
	'ar-sy' => 'Arabic (Syria)',
	'ar-tn' => 'Arabic (Tunisia)',
	'ar-ae' => 'Arabic (U.A.E.)',
	'ar-ye' => 'Arabic (Yemen)',
	'ar' => 'Arabic',
	'hy' => 'Armenian',
	'as' => 'Assamese',
	'az' => 'Azeri',
	'eu' => 'Basque',
	'be' => 'Belarusian',
	'bn' => 'Bengali',
	'bg' => 'Bulgarian',
	'ca' => 'Catalan',
	'zh-cn' => 'Chinese (China)',
	'zh-hk' => 'Chinese (Hong Kong SAR)',
	'zh-mo' => 'Chinese (Macau SAR)',
	'zh-sg' => 'Chinese (Singapore)',
	'zh-tw' => 'Chinese (Taiwan)',
	'zh' => 'Chinese',
	'hr' => 'Croatian',
	'cs' => 'Czech',
	'da' => 'Danish',
	'div' => 'Divehi',
	'nl-be' => 'Dutch (Belgium)',
	'nl' => 'Dutch (Netherlands)',
	'en-au' => 'English (Australia)',
	'en-bz' => 'English (Belize)',
	'en-ca' => 'English (Canada)',
	'en-ie' => 'English (Ireland)',
	'en-jm' => 'English (Jamaica)',
	'en-nz' => 'English (New Zealand)',
	'en-ph' => 'English (Philippines)',
	'en-za' => 'English (South Africa)',
	'en-tt' => 'English (Trinidad)',
	'en-gb' => 'English (United Kingdom)',
	'en-us' => 'English (United States)',
	'en-zw' => 'English (Zimbabwe)',
	'en' => 'English',
	'us' => 'English (United States)',
	'et' => 'Estonian',
	'fo' => 'Faeroese',
	'fa' => 'Farsi',
	'fi' => 'Finnish',
	'fr-be' => 'French (Belgium)',
	'fr-ca' => 'French (Canada)',
	'fr-lu' => 'French (Luxembourg)',
	'fr-mc' => 'French (Monaco)',
	'fr-ch' => 'French (Switzerland)',
	'fr' => 'French (France)',
	'mk' => 'FYRO Macedonian',
	'gd' => 'Gaelic',
	'ka' => 'Georgian',
	'de-at' => 'German (Austria)',
	'de-li' => 'German (Liechtenstein)',
	'de-lu' => 'German (lexumbourg)',
	'de-ch' => 'German (Switzerland)',
	'de' => 'German (Germany)',
	'el' => 'Greek',
	'gu' => 'Gujarati',
	'he' => 'Hebrew',
	'hi' => 'Hindi',
	'hu' => 'Hungarian',
	'is' => 'Icelandic',
	'id' => 'Indonesian',
	'it-ch' => 'Italian (Switzerland)',
	'it' => 'Italian (Italy)',
	'ja' => 'Japanese',
	'kn' => 'Kannada',
	'kk' => 'Kazakh',
	'kok' => 'Konkani',
	'ko' => 'Korean',
	'kz' => 'Kyrgyz',
	'lv' => 'Latvian',
	'lt' => 'Lithuanian',
	'ms' => 'Malay',
	'ml' => 'Malayalam',
	'mt' => 'Maltese',
	'mr' => 'Marathi',
	'mn' => 'Mongolian (Cyrillic)',
	'ne' => 'Nepali (India)',
	'nb-no' => 'Norwegian (Bokmal)',
	'nn-no' => 'Norwegian (Nynorsk)',
	'no' => 'Norwegian (Bokmal)',
	'or' => 'Oriya',
	'pl' => 'Polish',
	'pt-br' => 'Portuguese (Brazil)',
	'pt' => 'Portuguese (Portugal)',
	'pa' => 'Punjabi',
	'rm' => 'Rhaeto-Romanic',
	'ro-md' => 'Romanian (Moldova)',
	'ro' => 'Romanian',
	'ru-md' => 'Russian (Moldova)',
	'ru' => 'Russian',
	'sa' => 'Sanskrit',
	'sr' => 'Serbian',
	'sk' => 'Slovak',
	'ls' => 'Slovenian',
	'sb' => 'Sorbian',
	'es-ar' => 'Spanish (Argentina)',
	'es-bo' => 'Spanish (Bolivia)',
	'es-cl' => 'Spanish (Chile)',
	'es-co' => 'Spanish (Colombia)',
	'es-cr' => 'Spanish (Costa Rica)',
	'es-do' => 'Spanish (Dominican Republic)',
	'es-ec' => 'Spanish (Ecuador)',
	'es-sv' => 'Spanish (El Salvador)',
	'es-gt' => 'Spanish (Guatemala)',
	'es-hn' => 'Spanish (Honduras)',
	'es-mx' => 'Spanish (Mexico)',
	'es-ni' => 'Spanish (Nicaragua)',
	'es-pa' => 'Spanish (Panama)',
	'es-py' => 'Spanish (Paraguay)',
	'es-pe' => 'Spanish (Peru)',
	'es-pr' => 'Spanish (Puerto Rico)',
	'es-us' => 'Spanish (United States)',
	'es-uy' => 'Spanish (Uruguay)',
	'es-ve' => 'Spanish (Venezuela)',
	'es' => 'Spanish (Traditional Sort)',
	'sx' => 'Sutu',
	'sw' => 'Swahili',
	'sv-fi' => 'Swedish (Finland)',
	'sv' => 'Swedish',
	'syr' => 'Syriac',
	'ta' => 'Tamil',
	'tt' => 'Tatar',
	'te' => 'Telugu',
	'th' => 'Thai',
	'ts' => 'Tsonga',
	'tn' => 'Tswana',
	'tr' => 'Turkish',
	'uk' => 'Ukrainian',
	'ur' => 'Urdu',
	'uz' => 'Uzbek',
	'vi' => 'Vietnamese',
	'xh' => 'Xhosa',
	'yi' => 'Yiddish',
	'zu' => 'Zulu' );

	return $a_languages;
}
?>
 
Last edited:

figu120

New Member
Messages
921
Reaction score
0
Points
0
esta perfecto ahora ensayare donde me tocaria implementalo ire a preguntar alos desarrolladores de mi cms

de ante mano muchisimas gracias

un saludo de figu120
firma_figu120_1.png
 

jptosso

New Member
Messages
200
Reaction score
0
Points
0
yo te recomendaria que usaras la function y usaras include() para llamarla en el fichero config de tu cms :) asi de facil pero tu seteas tu cookie XD es cmo cuando tuhaces tu template para el cms
 

figu120

New Member
Messages
921
Reaction score
0
Points
0
bueno lo incluyo como include pero lo otro no te entiendo y como hago q mi cms llame esa funcion
 

eZakto

Member
Messages
782
Reaction score
1
Points
18
Acá mi versión, es un poco más optimizada ;)

Script que llamaríamos "lang.php":
PHP:
<?php
$default_lang = "es"; // Declaramos el lenguaje por defecto
if(file_exists("lang/".$_GET['lang'].".php")) { // Si existe el archivo de lenguaje indicado en la url...
	setcookie("lang", $_GET['lang'], time()+3600); // Crea la cookie
	include("lang/".$_GET['lang'].".php"); // Llama al archivo
} elseif($_COOKIE['lang']) { // Sino, si la cookie existe...
	include("lang/".$_COOKIE['lang'].".php"); // Llama al archivo
} else { // Sino...
	include("lang/".$default_lang.".php"); // Inlcuye el lenguaje por defecto
}

/* Función para imprimir un mensaje */
function lang($msg) {
	echo($lang[$msg]);
}
?>
Los archivos de idioma estarían así:
PHP:
<?php
/* Mensajes en array */
$lang['welcome'] = "Bienvenido";
$lang['login'] = "Iniciar sesión";
$lang['logout'] = "Cerrar sesión";
?>
Y los mensajes los imprimos...
PHP:
<span class="bienvenida"><strong><?php lang("welcome"); ?></strong></span>

Saludos.
 
Last edited:

jptosso

New Member
Messages
200
Reaction score
0
Points
0
oe, me explicarias un poco ke ase el elseif ? nunca lo e entendido XD
 

eZakto

Member
Messages
782
Reaction score
1
Points
18
Es un else con conidiciones, como el if.
Se ejecuta como si fuera un else (Sólo si el primer if no se ejecuta), pero establece nuevas condiciones.
 
Last edited:

figu120

New Member
Messages
921
Reaction score
0
Points
0
buno la vedad no entendi muy bien lo que dijo eZakto
y como adaptalo a mi cms q es nuke-et
gracias con algo simple se me puede solucionar mi problema gracias

firma_figu120_1.png
 
Last edited:

jptosso

New Member
Messages
200
Reaction score
0
Points
0
eZakto gracias xD y figu120 prueba crear un modulo o bloque con el codigo
salu2
 

figu120

New Member
Messages
921
Reaction score
0
Points
0
Acá mi versión, es un poco más optimizada ;)

Script que llamaríamos "lang.php":
PHP:
<?php
$default_lang = "es"; // Declaramos el lenguaje por defecto
if(file_exists("lang/".$_GET['lang'].".php")) { // Si existe el archivo de lenguaje indicado en la url...
    setcookie("lang", $_GET['lang'], time()+3600); // Crea la cookie
    include("lang/".$_GET['lang'].".php"); // Llama al archivo
} elseif($_COOKIE['lang']) { // Sino, si la cookie existe...
    include("lang/".$_COOKIE['lang'].".php"); // Llama al archivo
} else { // Sino...
    include("lang/".$default_lang.".php"); // Inlcuye el lenguaje por defecto
}

/* Función para imprimir un mensaje */
function lang($msg) {
    echo($lang[$msg]);
}
?>
Los archivos de idioma estarían así:
PHP:
<?php
/* Mensajes en array */
$lang['welcome'] = "Bienvenido";
$lang['login'] = "Iniciar sesión";
$lang['logout'] = "Cerrar sesión";
?>
Y los mensajes los imprimos...
PHP:
<span class="bienvenida"><strong><?php lang("welcome"); ?></strong></span>
Saludos.


ya entendi por fin u el primer codigo lo puedo poner como include o en header de mi csm para que llame esa funcion del principio....


y gracias ha sido de mucha ayuda
 

eZakto

Member
Messages
782
Reaction score
1
Points
18
Error! Una correción en mi código:

1° script (lang.php), en la línea 3:
PHP:
if(file_exists("lang/".$_GET['lang'].".php")) { // Si existe el archivo de lenguaje indicado en la url...

Reemplazar por:
PHP:
if(file_exists("lang/".$_GET['lang'].".php") && !$_COOKIE['lang']) { // Si existe el archivo de lenguaje indicado en la url...
 
Last edited:

jptosso

New Member
Messages
200
Reaction score
0
Points
0
ya entendi por fin u el primer codigo lo puedo poner como include o en header de mi csm para que llame esa funcion del principio....


y gracias ha sido de mucha ayuda

no es solo eso, tu tienes ke editar las frases de tu template, es cosa de editarlo y borrar todos los textos y colocar _DEFINE del texto :)
 

medina

x10 Addict
Community Support
Messages
1,815
Reaction score
7
Points
38
Yeeeee!... Exelente Aporte!... es muy bune scirpt manjae php cookies y me gusto eso q no seleciones el idioma, q la apgina busque el idioma q usas y te lo ponga!... pero las tima q solo eso funciona para menus o cosas simples ya que si lo quieres usar para contenidos esta muy dificl no creen?...
 
Top