Kirjautuminen

Haku

Tehtävät

Koodit: C++: Monikielinen ohjelma

Kirjoittaja: jutti

Kirjoitettu: 16.11.2005 – 16.11.2005

Tagit: koodi näytille, vinkki

Tein luokan, jolla käsittelen ohjelman monikielistä käyttäjäliittymää. Testasin sitä yhteen projektiini, ja se näyttäisi täyttävän ainakin omat tarpeeni. En ole tehnyt mitään hienosäätöä siihen ja jotkut jutut ovat aika kökköjä siinä, mutta se toimii. Luokka ei tee muuta kuin tallentaa merkkijonoja vector<string> -tyyppisiin tietueisiin. Luokan nimi on languige ja käytän sitä seuraavaan tapaan.

Esimerkki 1:ssä muodostan objektin nimeltä guis. Sitten lisään objektiin merkkijonoja. Jokainen lisäys koostuu yhdestä sanasta kaikilla lielillä (esimerkissä kolme kieltä). Samalla määrittelen makroja (gui_pelaa, gui_avaa jne).

Luokan jäsenellä get() haen std::string -tyyppisen merkkijonon, getc() palauttaa c-tyyppisen merkkijonon (char*).

Esimerkissä 2 on pari Allegro-tyyppistä riviä. Ekalla rivillä haetaan asetuksista kieli. Seuraavalla rivillä herjataan tekstillä, joka haetaan guis-objektista avaimilla gui_valmistaudu ja lang.

rautalankaosasto: lan-gui-ge. GUI, ymmärrättekste?

Esimerkki 1

#include "languige.h"

// ...

languige *guis = new languige(3);

#define gui_pelaa 0
guis->add("Pelaa", "Starta", "Start");
#define gui_avaa 1
guis->add("Avaa", "Öppna", "Open");
#define gui_editori 2
guis->add("Editori", "Editor", "Editor");
#define gui_asetukset 3
guis->add("Asetukset", "Inställningar", "Settings");
#define gui_valmistaudu 4
guis->add("Valmistaudu seuraavaan tasoon", "Förbered dig på följande nivå", "Prepare for next level");

Esimerkki 2

lang = get_config_int("settings", "language", 0);
alert(guis->getc(gui_valmistaudu, lang), "", "", "Ok", NULL, -1, -1);

languige.h

#ifndef LANGUIGEH
#define LANGUIGEH

#include <vector>
#include <string>

using namespace std;

class languige
{
    vector <vector<string> > the_strings;
    int n_of_lang;
    int n_of_items;

    public:

    languige(int n);
    void add(char *str, ...);
    string get(int item, int language);
    const char *getc(int item, int language);
};


#endif

languige.cpp

#include <string>
#include <vector>
#include <stdarg.h>
#include "languige.h"

using namespace std;

languige::languige(int n)
: n_of_lang(n)
{
}

void languige::add(char *str, ...)
{
    va_list params;
    va_start(params, str);
    vector <string>adder;
    adder.push_back(string(str));
    for (int i = 1; i < n_of_lang; i++)
    {
        adder.push_back(string(va_arg(params, char*)));
    }
    the_strings.push_back(adder);
    n_of_items++;
    va_end(params);
}

string languige::get(int item, int language)
{
    return the_strings[item][language];
}

const char *languige::getc(int item, int language)
{
    return the_strings[item][language].c_str();
}

Kommentit

NanoSoft [22.12.2005 22:24:07]

#

Ihan kiva, mut toi pelaa on enkuks play ja start on käynnistä...

moptim [19.12.2006 20:49:30]

#

Start -> Aloita...

TheSavageSam [27.05.2010 16:27:03]

#

Onnistuukos ihan tuolla tavalla, jos haluaa vaikka mandariinikiinan tuohon kieleksi? Eli miten on UTF-8:n laita?

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta