<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++ Lokalisierung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in meiner Anwendung mehrere Sprachen (Deutsch, Englisch etc.) unterstützen. Wie könnte ich das am einfachsten machen (ohne externe Lib)? Also dass in der deutschen Version in der Anwendung steht &quot;Wie geht es dir?&quot; und in der englischen &quot;How are you&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304561/c-lokalisierung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 18:45:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304561.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Jun 2012 08:56:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 08:56:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in meiner Anwendung mehrere Sprachen (Deutsch, Englisch etc.) unterstützen. Wie könnte ich das am einfachsten machen (ohne externe Lib)? Also dass in der deutschen Version in der Anwendung steht &quot;Wie geht es dir?&quot; und in der englischen &quot;How are you&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221244</guid><dc:creator><![CDATA[Localizer33]]></dc:creator><pubDate>Sat, 09 Jun 2012 08:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 09:49:11 GMT]]></title><description><![CDATA[<p>Localizer33 schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich möchte in meiner Anwendung mehrere Sprachen (Deutsch, Englisch etc.) unterstützen. Wie könnte ich das am einfachsten machen (ohne externe Lib)? Also dass in der deutschen Version in der Anwendung steht &quot;Wie geht es dir?&quot; und in der englischen &quot;How are you&quot;?</p>
</blockquote>
<p>Phrases.hxx</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

std::vector&lt;std::string&gt; const PHRASES =
{
#ifdef EN
      &quot;Hello World!&quot;,
      &quot;How are you doing?&quot;
#elif defined DE
      &quot;Hallo Welt!&quot;,
      &quot;Wie geht's dir?&quot;
#endif
};

enum PHRASE_INDEX
{
      Greeting,
      HowAreYou //denk dir bessere Bezeichner aus :D
};
</code></pre>
<p>Main.cxx</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#define DE

#include &quot;Phrases.hxx&quot;

int main()
{
      std::cout &lt;&lt; PHRASES[HowAreYou] &lt;&lt; '\n';
}
</code></pre>
<p>Oder: Etwas schönes aus dem hause trolltech und in Qt enthalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221256</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 09 Jun 2012 09:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 09:55:12 GMT]]></title><description><![CDATA[<p>Was auch geht: Damit muss die Sprache nicht zur Compilezeit bekannt sein:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

std::vector&lt;std::vector&lt;std::string&gt;&gt; const Phrases =
{
      {//EN
            &quot;Hello World!&quot;,
            &quot;How are you doing?&quot;
      },
      {//DE
            &quot;Hallo Welt!&quot;,
            &quot;Wie geht's dir?&quot;
      }
};

enum LanguageIndex
{
      ENG,
      GER
};

enum PhraseIndex
{
      Greeting,
      Question1 //denk dir bessere Bezeichner aus :D
};

int main()
{
      std::cout &lt;&lt; Phrases[GER][Question1] &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2221257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221257</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 09 Jun 2012 09:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 13:04:32 GMT]]></title><description><![CDATA[<p>Hackers Lösungen finde ich beide nicht so toll, da hier unnötigerweise Speicher angefordert wird. Wie wäre es mit sowas?</p>
<pre><code class="language-cpp">enum language { en = 0, de = 1, };
enum text { greeting = 0, how_are_you_question = 1, };

char const* const strings[][] =
{
    { &quot;Hello, World!&quot;, &quot;How are you?&quot;    },
    { &quot;Hallo, Welt!&quot;,  &quot;Wie geht's dir?&quot; }
};
</code></pre>
<p>Dann machste dir noch ne Funktion get_text:</p>
<pre><code class="language-cpp">char const* get_text(language lang, text tx)
{
    return strings[lang][tx];
}
</code></pre>
<p>Und dann kannste dir die Begrüßung in englischer Sprache holen über:</p>
<pre><code class="language-cpp">get_text(language::en, text::greeting);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2221331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221331</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 09 Jun 2012 13:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 13:40:14 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Hackers Lösungen finde ich beide nicht so toll, da hier unnötigerweise Speicher angefordert wird. Wie wäre es mit sowas?</p>
<pre><code class="language-cpp">enum language { en = 0, de = 1, };
enum text { greeting = 0, how_are_you_question = 1, };

char const* const strings[][] =
{
    { &quot;Hello, World!&quot;, &quot;How are you?&quot;    },
    { &quot;Hallo, Welt!&quot;,  &quot;Wie geht's dir?&quot; }
};
</code></pre>
<p>Dann machste dir noch ne Funktion get_text:</p>
<pre><code class="language-cpp">char const* get_text(language lang, text tx)
{
    return strings[lang][tx];
}
</code></pre>
<p>Und dann kannste dir die Begrüßung in englischer Sprache holen über:</p>
<pre><code class="language-cpp">get_text(language::en, text::greeting);
</code></pre>
</blockquote>
<p>Jetzt versuche ich mal klugzuscheißern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Das ist ungefähr genau das meinige, nur ohne den vector und den Strings aber mit einem C-Style Array und C-Style Strings - die gar nicht das essentielle waren. Ist das denn nicht schon premature optimization? erwischt :p<br />
Wieso eine Funktion? Auch wenn sie höchstwahrscheinlich geinlined wird (oder zumindest RVO angewandt wird), ist sie unnötig da man gleich die Enumeratoren als Indizen nutzen kann. (Außer du findest es so schöner, das ist natürlich ein Punkt)<br />
Die Initialisierung des Arrays ist syntaktisch falsch, da du nur die Größe der ersten Dimension automatisch deduzieren lassen kannst.</p>
<p>Außerdem kann er auch den Qt Linguist verwenden...der macht es halt professionell (da man bei unser beider Lösungen selbst den Fehler machen kann, etwas falsch zu übersetzen (auch wenn viele Übersetzungsprogramme noch an ihrer Grammatik arbeiten müssen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221348</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 09 Jun 2012 13:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 14:05:50 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Das ist ungefähr genau das meinige, nur ohne den vector und den Strings aber mit einem C-Style Array und C-Style Strings - die gar nicht das essentielle waren. Ist das denn nicht schon premature optimization? erwischt :p</p>
</blockquote>
<p>Eigentlich nicht, weil mit den Strings überhaupt nichts angestellt wird.</p>
<blockquote>
<p>Wieso eine Funktion? Auch wenn sie höchstwahrscheinlich geinlined wird (oder zumindest RVO angewandt wird), ist sie unnötig da man gleich die Enumeratoren als Indizen nutzen kann. (Außer du findest es so schöner, das ist natürlich ein Punkt)</p>
</blockquote>
<p>In einem halben Jahr fällt dir auf, dass deine Übersetzungstabelle viel zu unübersichtlich geworden ist oder ein professioneller Übersetzer die Übersetzungen erstellen soll, ohne im Quellcode rumzupfuschen. Dann willst du deine Übersetzungen in einer Datenbank oder einer Konfigurationsdatei oder sonstwo haben. Wenn das Lookup in einer Funktion gekapselt wurde, ist das überhaupt kein Problem. Bei deiner Lösung muss man den halben Quellcode ändern oder komische Spielchen mit Proxys treiben.</p>
<p>Edit: Denk außerdem an solche Dinge wie beliebig viele Platzhalter in Phrasen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221361</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 09 Jun 2012 14:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 14:12:21 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<blockquote>
<p>Wieso eine Funktion? Auch wenn sie höchstwahrscheinlich geinlined wird (oder zumindest RVO angewandt wird), ist sie unnötig da man gleich die Enumeratoren als Indizen nutzen kann. (Außer du findest es so schöner, das ist natürlich ein Punkt)</p>
</blockquote>
<p>In einem halben Jahr fällt dir auf, dass deine Übersetzungstabelle viel zu unübersichtlich geworden ist oder ein professioneller Übersetzer die Übersetzungen erstellen soll, ohne im Quellcode rumzupfuschen. Dann willst du deine Übersetzungen in einer Datenbank oder einer Konfigurationsdatei oder sonstwo haben. Wenn das Lookup in einer Funktion gekapselt wurde, ist das überhaupt kein Problem. Bei deiner Lösung muss man den halben Quellcode ändern oder komische Spielchen mit Proxys treiben.</p>
<p>Edit: Denk außerdem an solche Dinge wie beliebig viele Platzhalter in Phrasen.</p>
</blockquote>
<p>Du könntest dann das Array wegschmeißen, eine Klasse mit demselben Namen Definieren und für die dann geschickt den Indizoperator überladen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> , aber gut - das ist natürlich lächerlich viel Aufwand. Kapseln klingt gut.</p>
<p>Edit: Obige Idee fällt unter &quot;komische Spielchen mit Proxys&quot;, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221363</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 09 Jun 2012 14:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 14:33:00 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Edit: Obige Idee fällt unter &quot;komische Spielchen mit Proxys&quot;, richtig?</p>
</blockquote>
<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221367</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 09 Jun 2012 14:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Lokalisierung on Sat, 09 Jun 2012 22:48:26 GMT]]></title><description><![CDATA[<p>Mit ein wenig Abstraktion und in C**++**:</p>
<pre><code class="language-cpp">#include &lt;array&gt;
#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;iostream&gt;

namespace example
{
	struct Language
	{
		enum TextId
		{
			HelloWorld,
			//...

			Count_,
		};

		typedef std::array&lt;std::string, Count_&gt; Texts;

		Texts texts;
	};

	static bool loadLanguage(std::istream &amp;file, Language &amp;language)
	{
		for (auto i = begin(language.texts); i != end(language.texts); ++i)
		{
			getline(file, *i);
		}
		return file.good();
	}

	static void printHelloWorld(std::ostream &amp;out, const Language &amp;lang)
	{
		out &lt;&lt; lang.texts[Language::HelloWorld] &lt;&lt; &quot;\n&quot;;
	}
}

int main()
{
	using namespace example;

	const Language builtinGerman =
	{{{
		&quot;Hallo, Welt&quot;, //HelloWorld
	}}};

	printHelloWorld(std::cout, builtinGerman);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2221544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221544</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 09 Jun 2012 22:48:26 GMT</pubDate></item></channel></rss>