Foros del Web » Programando para Internet » PHP »

Ignorar mayúsculas de minúsculas

Estas en el tema de Ignorar mayúsculas de minúsculas en el foro de PHP en Foros del Web. Buenos días jovenes, Mira tengo un archivo donde defino mis contantes para cuestiones de idiomas, el detalle esta en que cuando estas fueron creadas no ...
  #1 (permalink)  
Antiguo 27/08/2008, 09:26
Avatar de lusam  
Fecha de Ingreso: enero-2007
Ubicación: Panamá
Mensajes: 56
Antigüedad: 17 años, 10 meses
Puntos: 0
Sonrisa Ignorar mayúsculas de minúsculas

Buenos días jovenes,
Mira tengo un archivo donde defino mis contantes para cuestiones de idiomas, el detalle esta en que cuando estas fueron creadas no hubo un orden al momento de declararlas, por ejem:

define("Basic_LabeL","basico")
define("Lang_IdiOma","Idioma")
define("lang_NaMe","Nombre")

esto ocaciona que cuando llamo estas constantes muchas veces se omiten las mayusculas o no se ponen tal cual estan definidas, de esta forma no me manda la traduccion adecuada.
Copio el codigo para aclarar mejor la situacion.


Código PHP:
<?
define
("Basic_LabeL","basico");

function 
Translate($Word){
    if (
defined($Word)){
         return 
constant($Word);
    } 
        return 
$Word;     
}


// body

$cadena=Translate('Basic_label');
echo 
$cadena//me imprime incorrecto porque no esta bien escrito Basic_label es distinto de Basic_LabeL

echo "<br>";


$cadena2=Translate('Basic_LabeL');
echo 
$cadena2//me imprime correcto porque esta declarada tal cual

?>
Una solucion desde mi punto de vista es lograr que php me ignore mayusculas de minusculas osea que si pongo Basic_label lo interprete como Basic_LabeL y me devuelva la traduccion que corresponde.

Les agradezco mucho la ayuda que me puedan proporcionar.

Saludos,
Luz
  #2 (permalink)  
Antiguo 27/08/2008, 09:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Ignorar mayúsculas de minúsculas

pues ese es el preciso problema con las constantes, que son constantes... así es su comportamiento (incluso con variables, supongo)

si la defines en mayúsculas, debes llamarla en mayúsculas... no hay de otra...

demás de que Basic_LabeL es un barbarismo al deformar de una manera poca estética una simple palabra....

personalmente te recomiendo definir tus constantes con puras mayúsculas (como dice PHP)

aunque bueno, la otra.... mas compleja... seria así

haces un bucle con el arreglo obtenido de la función get_defined_constants()

por cada elemento haces un preg_match (insensible a may/min) y si te da true, bingo!!

suerte....

PDTA: por cierto... si ya definiste las constantes, osea... que casi nunca van a cambiar de nombre... porque usar una función para esto?? (supongo que es mas bonito, no???)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/08/2008, 09:46
Avatar de lusam  
Fecha de Ingreso: enero-2007
Ubicación: Panamá
Mensajes: 56
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Ignorar mayúsculas de minúsculas

La función la uso para que me devuelva el tag o el label en caso de que no este declarada y poder asignarle la traducción requerida, y me sirve, solo que son muchas, osea no es la mejor solucion.

En cuanto al bucle que me sugieres, dices: "si te da true, bingo", y si me da false??, es lo mismo en que estoy, si me da false debo arreglar la variable mal llamada, eso es lo que quiero evitar por ser tantas.

Muy amable por tu pronta respuesta pateketrueke.
Saludos,
Luz
  #4 (permalink)  
Antiguo 27/08/2008, 09:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Ignorar mayúsculas de minúsculas

no te preocupes, del modo en que lo planteas... es una buena forma de ir agregando traducciones mientras se avanza en el proyecto, genial!!

no se a que te refieres en el... y si da false??

vamos a hacer lo que te digo, usando la lógica de tu función...

Código PHP:
<?php

define
('foo_bar''foobar');
define('Candy''candy');
define('BAR''bar');

function 
ln($str)
{
  
$expr preg_quote($str); // escapamos
  
$d get_defined_constants();

  foreach (
$d as $key => $val)
  {
    if (
preg_match("/^$expr$/i"$key))
     {
        return 
$val;
     }
  }
  
// por defecto, devolvemos la cadena
  
return strtoupper($str);
}


// tests....
echo ln('foo').'<br />';
echo 
ln('foo_bar').'<br />';
echo 
ln('candy').'<br />';
echo 
ln('bar').'<br />';

echo 
ln('no_existo').'<br />';

?>
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/08/2008, 09:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Ignorar mayúsculas de minúsculas

Ojo:, get_defined_constants() te regresara todas las constantes definidas (inclusive las de las funciones PHP), te recomiendo usar:
Código PHP:
function ln($str)
{
  
$expr preg_quote($str); // escapamos
  
$d get_defined_constants(true);
  
$d $d['user'];

  foreach (
$d as $val)
  {
    if (
preg_match("/$expr/i"$val))
  }
  
// por defecto, devolvemos la cadena
  
return strtoupper($str);

Por otro lado creo deberías usar la forma internacional de traducir, que es con gettext.

Saludos.
  #6 (permalink)  
Antiguo 27/08/2008, 09:55
Avatar de lusam  
Fecha de Ingreso: enero-2007
Ubicación: Panamá
Mensajes: 56
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: Ignorar mayúsculas de minúsculas

vaya, eres genial, nunca hubiese podido hacer esto.
Muy muy amable.

Luz.
  #7 (permalink)  
Antiguo 27/08/2008, 09:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Ignorar mayúsculas de minúsculas

si... de hecho, yo prefiero usar variables.... (de echo no hago nada que no sea en español) :D

GatorV tiene mas razón, voy a intentarlo como dices... sino, me quedo con esta forma "tradicional" de personalizar traducciones... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.