Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Controllo lingua in un sito

    Ciao a tutti !

    Sto creando una pagina web multilingua.

    Cercando un po' sul web ho capito che la soluzione migliore per implementare più lingue e attraverso i file .ini dove puoi dichiarare delle define.
    Anche joomla usa questa soluzione.

    Il problema è che non capisco come fare per usare queste difine che uno a dichiarato.
    Io le vorrei usare nei file php che ho. joomla ho visto che usa un file xml ma nonostante ho provato ad analizzare il codice non ho capito dove richiama il file .ini

    Quindi se qualcuno mi può spiegare bene cosa devo fare per richiamare queste define mi farebbe un grande favore!
    ps: inoltre se siete proprio bravi :P potete anche darmi dei consigli su come implementare bene i file .ini? Ho visto che alcuni inseriscono delle paretesi quadre, ma non so a che servono e come si usano ???

    Grazie a tutti per il vostro aiuto.

  2. #2
    Vi metto alcuni pezzi di file di joomla, forse riuscite meglio a capire come aiutarmi.
    // file : it-IT.mod-menu.ini //
    Codice PHP:
    ...
    MOD_MENU="Menu"
    MOD_MENU_FIELD_CLASS_DESC="Un suffisso da applicare alla classe CSS delle voci di menu"
    MOD_MENU_FIELD_CLASS_LABEL="Suffisso classe menu"
    MOD_MENU_FIELD_ENDLEVEL_DESC="Livello a cui fermare il menu. Se scegli 'Tutti', verranno mostrati tutti i livelli a seconda del parametro 'Mostra sotto-voci di menu'."
    MOD_MENU_FIELD_ENDLEVEL_LABEL="Livello finale"
    MOD_MENU_FIELD_MENUTYPE_DESC="Seleziona un menu dalla lista"
    MOD_MENU_FIELD_MENUTYPE_LABEL="Seleziona menu"
    ... 
    // file : mod_menu.xml //
    Codice PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <extension
        type="module"
        version="1.6.0"
        client="site"
        method="upgrade">
        <name>mod_menu</name>
        <author>Joomla! Project</author>
        <creationDate>July 2004</creationDate>
        <copyright>Copyright (C) 2005 - 2011 Open Source Matters. All rights reserved.</copyright>
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
        <authorEmail>admin@joomla.org</authorEmail>
        <authorUrl>[url]www.joomla.org[/url]</authorUrl>
        <version>1.6.0</version>
        <description>MOD_MENU_XML_DESCRIPTION</description>
        <files>
            <filename
                module="mod_menu">mod_menu.php</filename>
            <folder>tmpl</folder>
            <filename>helper.php</filename>
            <filename>index.html</filename>        <filename>mod_menu.xml</filename>
        </files>
        <help key="JHELP_EXTENSIONS_MODULE_MANAGER_MENU" />
        <config>
            <fields name="params">
                <fieldset name="basic">
                    <field
                        name="menutype"
                        type="menu"
                        label="MOD_MENU_FIELD_MENUTYPE_LABEL"
                        description="MOD_MENU_FIELD_MENUTYPE_DESC" />
                    <field
                        name="startLevel"
                        type="list"
                        default="1"
                        label="MOD_MENU_FIELD_STARTLEVEL_LABEL"
                        description="MOD_MENU_FIELD_STARTLEVEL_DESC" 
                    >
    ...
    Come potete vedere inizia da subito a richiamare le define, ma non richiama il file .ini, come può capire xml capire dove andare a prendere le define ???

    // file : mod_menu.php, Ve lo posto tutto xkè è cortissimo. //
    Codice PHP:
    <?php
    // no direct access
    defined('_JEXEC') or die;
    // Include the module helper classes.
    if (!class_exists('ModMenuHelper')) {
        require 
    dirname(__FILE__).'/helper.php';
    }
    if (!
    class_exists('JAdminCssMenu')) {
        require 
    dirname(__FILE__).'/menu.php';
    }
    // Initialise variables.
    $lang        JFactory::getLanguage();
    $user        JFactory::getUser();
    $menu        = new JAdminCSSMenu();
    $enabled    JRequest::getInt('hidemainmenu') ? false true;
    // Render the module layout
    require JModuleHelper::getLayoutPath('mod_menu'$params->get('layout''default'));
    Spero che tutto questo vi sia di aiuto.

  3. #3
    Azz proprio Joomla ti sei preso come esempio?
    Comunque...JFactory::getLanguage() <-- questo recupera le info del linguaggio.

    A te invece conviene fare il tuo file di lingua come il file .ini di Joomla, dove definisci fondamentalmente un array che ha come chiave il nome del testo da cambiare e come valore...beh quello che dovrebbe esserci scritto
    Codice PHP:
    $language = array(
    ....
    "TESTO_TITOLO_TABELLA_CALENDARIO" => "Calendario del mese",
    "DESCRIZIONE_TABELLA_CALENDARIO" => "Seleziona una data per vedere i relativi eventi",
    ....
    ); 
    Dovrai poi fare la tua grafica in modo tale che ovunque ci debba essere un qualcosa che varia in base alla lingua, ci sia NON il testo ma il nome della chiave, es:
    codice:
    ....
    <span>TESTO_TITOLO_TABELLA_CALENDARIO</span>
    <div id="pippo">DESCRIZIONE_TABELLA_CALENDARIO</div>
    ....
    Poi devi fare una serie di replace che vadano a sostituire, nel html definito come sopra, alle varie chiavi i relativi valori usando quindi qualcosa del tipo
    Codice PHP:
    $html $skin->get_calendario_template(); // questo ti da l'html visto poco sopra
    include_once("/languages/{$choosen_language}.ini"); // $choosen_language è il nome del linguaggio scelto o tramite un ini dove c'è un default o tramite una scelta utente o tramite altro modo
    foreach ($language as $key => $value) {
        
    $html str_replace($key$value$html);

    Ci sono altri modi anche più efficenti, ma per cominciare a capire va bene anche così


  4. #4
    No, questa soluzione l'ho già applicata. Ma non va affatto bene, ecco xkè mi sono preso joomla come esempio :P.
    Il fatto è che il mio sito prevede più di 10000 campi... è potrà averne molti molti di più in un futuro.
    è mia intenzione eseguire la realizzazione migliore.

    Non c'è un modo più semplice per realizzare ciò che fa joomla?
    Cioè non si può in php richiamo il file .ini con un include e poi
    richiamare le varie define definite lì in qualche modo?

    Grazie per il tuo aiuto.

  5. #5
    Beh...basta che nel file che genera l html cambi la logica...
    Ti carichi il .ini (eventualmente date le quantità di variabili ne fai tanti, suddivisi per sezione per esempio) e poi nel file html
    codice:
    ...
    <span>{$language_section["TESTO_TITOLO_TABELLA_CALENDARIO"]}</span>
    <div id="pippo">{$language_section["DESCRIZIONE_TABELLA_CALENDARIO"]}</div>
    ...
    Ti eviti così i replace, ma anche fossero 50.000 non credo che ci metta molto più di un secondo su un biprocessore...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.