Čeština v konzoli napříč platformami – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Čeština v konzoli napříč platformami – C / C++ – Fórum – Programujte.comČeština v konzoli napříč platformami – C / C++ – Fórum – Programujte.com

 

PiranhaGreg
~ Anonymní uživatel
165 příspěvků
11. 1. 2015   #1
-
0
-

Zdravím,

přepisuji jednu starou textovou hru do C++. Původní verze je napsaná bez diakritiky, ale já bych jí tam rád dodělal. Hraj je z roku 1987 a tak se dá předpokládat, že si jí možná někdo pustí i za dalších 30 let. Proto bych to rád napsal nezávisle na OS jen s využitím standardní knihovny + případně něčeho přibaleného. Lze to nějak?

Zkoušel jsem

#include <iostream>

int main(void) {
	std::wcout << L"Příliš žluťoučký kůň úpěl ďábelské ódy" << std::endl;
	
	return 0;
}

Ale už i na Linuxu mi to vrací otazníky. Windows jsem ani nezkoušel. Klidně bych zvolil jiný jazyk, ale nic tak konzistentního mě nenapadlo... 

Nahlásit jako SPAM
IP: 109.81.210.–
Kit+15
Guru
11. 1. 2015   #2
-
0
-

#1 PiranhaGreg
Nechej to bez diakritiky a nasaď na to gettext.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:18f4:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Radek Chalupa
~ Redaktor
+1
Super člen
11. 1. 2015   #3
-
0
-

#1 PiranhaGreg
Myslím že ve Windows bude fungovat

_wsetlocale(LC_ALL, L"Czech"); // na začátku programu, samozřejmě

Radek Chalupa
- individuální konzultace a školení programování (C/C++, WinAPI, COM, ActiveX, ATL, C#, NET Framework, MFC)
- vývoj software na zakázku
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Kenvelo+2
Super člen
12. 1. 2015   #4
-
0
-

#1 PiranhaGreg
Zkus 

#include <iostream>
#include <locale>

using namespace std;

int main()
{
	locale CZ("czech");
	locale::global(CZ);
	
	cout << "Příliš žluťoučký kůň úpěl ďábelské ódy";

	return 0;
}
Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
PiranhaGreg
~ Anonymní uživatel
165 příspěvků
20. 1. 2015   #5
-
0
-

Díky moc za pomoc. Nakonec se mi zalíbilo řešení od Kenvela. Takhle to funguje skvěle pod Windows i Linux a pořád můžu zůstat u UTF-8 stringů :-).

#include <iostream>
#include <locale>
#include <stdexcept>

#ifdef __unix__
	#define CZ "cs_CZ.utf8"
#else
	#define CZ "cs-CZ"
#endif

using namespace std;

int main(void) {
	try {
		locale cz(CZ);
		locale::global(cz);
	}
	catch (std::runtime_error) {
		cerr << "Nepodarilo se nastavit ceske prostredi..." << endl;
		return 1;
	}
	
	cout << "Příliš žluťoučký kůň úpěl ďábelské ódy" << endl;

	return 0;
}

Ještě nevíte náhodou, jestli mi to cs-CZ pokrývá všechny platformy, nebo se někde používá ještě nějaká jiná kombinace? Žádnej oficiální seznam jsem nenašel.

Jinak ještě jednou díky ;-).

Nahlásit jako SPAM
IP: 109.81.210.–
q
~ Anonymní uživatel
219 příspěvků
20. 1. 2015   #6
-
0
-

Ne, žádná magie se nekoná, funguje to jen tam, kde je to locale nainstalované a funkční (třeba fonty...).

Ty bys neměl locale měnit, ale použít to, které je v systému aktivní. Třeba ten gettext, jak ti radil Kit, automaticky volí překlad podle systému.

Případně si alternativu pro přepínání mezi "cesky" a "česky" můžeš napsat sám.

Nahlásit jako SPAM
IP: 78.156.159.–
Zbyněk
~ Anonymní uživatel
7 příspěvků
12. 3. 2015   #7
-
0
-

perfektní dotaz a článek. Jen dotaz: pokud použiji knihovnu conio, bude to pořád multiplatformní? Nebo se nemusím bát popřípadě jak použít místo toho #include<cstdio>??  

#include<iostream>
#include<sstream>
#include<conio.h>
#include<locale>
#include <stdexcept>

#ifdef __unix__
#define CZ "cs_CZ.utf8"
#else
#define CZ "cs-CZ"
#endif
#define STOPA 3.281
#define PALEC 29.37
#define LIBRA 2.205
using namespace std;                                  

	                                                  // Vyska v palcich * 0.0254, = vyska v metrech;
	                                                  // vaha v librach / 2.2 = vaha v kilogramech;
													  // vaha v kilogramech / ctverec vahy v metrech = BMI
													  // 1 libra = 0,454 kilogramů
													  // 1 palec = 2,54 centimetrů   0,025 metrů    
													  // 1 stopa = 30,48 centimetrů  0,305 metrů

   int main()										  
{                                                    
	try
	{
		locale cz(CZ);
		locale::global(cz);
	}
	catch (std::runtime_error)
	{
		cerr << "Nepodarilo se nastavit ceske prostredi..." << endl;
		return 1;
	}
Nahlásit jako SPAM
IP: 79.127.183.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý