Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C/C++]: Cambio lingua

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    10

    cambio lingua

    Buongiorno a tutti quelli che mi leggeranno.
    Ho bisogno di un aiuto e spero sinceramente sia una cagata quella che chiedo!

    Sto sviluppando un sistema nel quale ho un box di controllo: l'utente deve compiere spostamenti mediante tastierina/telecomando
    E' un oggetto che andrà esportato quindi utilizzeremo più lingue oltre all'italiano; per ora mi sbatto solo con l'inglese.
    Qual è il metodo più semplice per caricare le due versioni? la scelta l'ho già inserita, ora devo dirgli di caricare la lingua dovuta

    Fino ad ora le mie scritte sono in un file "ldc.h"
    #define LCD_ASPETTA "attendere per favore"
    #define LCD_PREMI_1 "premere 1"
    ...

    ed ho già pronti i
    #define LCD_ASPETTA "wait please"
    #define LCD_PREMI_1 "push 1"
    ....

    Se qualcuno mi viene in soccorso, grazie mille!!!
    Marco

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: cambio lingua

    Originariamente inviato da Zenon
    E' un oggetto che andrà esportato quindi utilizzeremo più lingue oltre all'italiano; per ora mi sbatto solo con l'inglese.
    Qual è il metodo più semplice per caricare le due versioni? la scelta l'ho già inserita, ora devo dirgli di caricare la lingua dovuta
    La questione della "localizzazione" non è banale, anche perché la si può fare in diversi modi e che, tra l'altro, dipendono anche dal sistema operativo usato.

    Ci sono diversi "scenari":

    A) Decidi la lingua a tempo di compilazione (tramite una define). Il tuo eseguibile quindi conterrà le stringhe di testo solo per 1 lingua. In pratica dovrai generare più eseguibili uno per ogni lingua.

    B) Il tuo eseguibile contiene le stringhe di testo per tutte le lingue supportate. La scelta della lingua viene fatta a run-time dall'utente tramite una opzione, un menù, una configurazione (o altre cose del genere).

    C) Il tuo eseguibile non contiene le stringhe di testo ma si appoggia a file esterni (di testo o binari in qualche formato) per leggere le stringhe di testo localizzate. (questo è quello che succede su linux, per esempio).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Presupponendo la soluzione B) di andbin è facile costruire un sistema abbastanza rapido:

    Hai una funzione che inizializza la lingua precedentemente impostata dall'utente, sapendo che tu hai già scritto #define contenete il testo di ogni lingua, dovrai creare altrettante variabili (non il nummero delle frasi di tutte e due le lingue ) che la funzione di inizializzazione appunto inizializzerà inserendo la frase corrispondente della lingua selezionata.

    Spero che hai capito qualche cosa!
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    10

    ehm...

    allora, cerco di farti capire:
    nel software del box ho messo la scelta della lingua: entri nel menu, scegli la voce "linguaggio" e scorri le opzioni (per ora solo "italiano" e "inglese", poi metteremo altre)

    La mia intenzione era partire sempre con l'italiano che è nel "lcd.h"; poi ne momento in cui l'utente vuole l'inglese, cambia l'impostazione (quindi una qualsiasi variabile, credo) e il C (che è sotto windows) vorrei mi caricasse le voci inglesi anzichè italiane; per come è adesso, volevo mettere entrambe le righe in "lcd.h".

    Il main chiama la funzione
    LcdPrint (LCD_ASPETTA);

    LCD_ASPETTA è in lcd.h
    #define LCD_ASPETTA "Aspetta"
    #define LCD_ASPETTA "Wait"

    e se l'impostazione è italiana prende "Aspetta", mentre se fosse inglese prende "Wait"
    Come faccio a dirgli di scegliere una o l'altra? con un #ifdef o cose del genere?
    Non ho dimestichezza con questa voce; se mi puoi fare un esempio...
    Grazie

  5. #5
    Io suggerivo come segue:

    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    #define i_aspetta "Aspetta"
    #define e_aspetta "Wait"
    
    char* aspetta;
    
    int main()
    {
      int scelta;
      cout<<"Inserire 1 per inglese, 2 per italiano\n";
      cin>>scelta;
      if(scelta==1)aspetta=i_aspetta;
      else aspetta=e_aspetta;
      cout<<endl<<aspetta<<endl;
      system("PAUSE");
      return 0;
    }
    Questo è per Dev-C++ ma il procedimanto è semplice! Spero che abbia capito
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    10

    si, certo

    cambiando il nome a tutte le variabili è più facile....
    Ok, grazie per le risposte istantanee!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Si può anche pensare di fare una cosa del tipo:

    codice:
    #define LANG_ITALIANO   0
    #define LANG_ENGLISH    1
    
    typedef struct
    {
        char *aspetta;
        char *premi_un_tasto;
    } STR_LANG;
    
    
    STR_LANG strLang[2] =
    {
        {
            "Aspetta",
            "Premi un tasto"
        },
        {
            "Wait",
            "Press a key"
        }
    };
    Quando l'utente ha scelto italiano o inglese, basta impostare una variabile (es. idxLang) a 0 oppure 1. A quel punto basta prendere strLang[idxLang].aspetta per avere la stringa. E così per tutte le altre.


    EDIT: C'è anche un'altra possibilita: invece di usare un array, usare un puntatore.

    codice:
    typedef struct
    {
        char *aspetta;
        char *premi_un_tasto;
    } STR_LANG;
    
    
    STR_LANG strLang_Italiano =
    {
        "Aspetta",
        "Premi un tasto"
    };
    
    STR_LANG strLang_English =
    {
        "Wait",
        "Press a key"
    };
    
    
    STR_LANG *strLang;
    Quando l'utente sceglie la lingua fai:

    strLang = &strLang_Italiano;
    oppure
    strLang = &strLang_English;

    e poi usi sempre strLang->aspetta per accedere alla stringa.

    Scegli quella che ti piace di più.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.