Git – Spórolj karaktereket, légy gazdag!

Csak egy apróság, de minden gépemen ez az egyik első dolog, amit beállítok: git parancsok rövidítése.

“Git – Spórolj karaktereket, légy gazdag!” olvasásának folytatása

Reklámok

Telepítés Google Cloudba Docker konténerből

Mostanában sokat kell a címben említett felhőben hegesztenem. Pár hete épp egy (sok) App Engine-en futó szervert kellett megreszelnem (oké, most már kezdenek furák lenni ezek az igék), és ennek kapcsán felmerült, hogy oké, tudom tudok telepíteni a gépemről, de hogyan mondom meg a CI/CD rendszernek, hogy tolja fel az appot a felhőbe?

Itt egy megoldás!

“Telepítés Google Cloudba Docker konténerből” olvasásának folytatása

Média átalakítása és streamelése serverless módon

Az elmúlt néhány napban kénytelen voltam némi node.js tudást magamra szedni, hogy megoldjak egy aranyos problémát: hogyan alakítsunk át egy zenefájlt “lekérdezés közben” egy “szerver nélkül”, felhőben futó függvény segítségével. Nem olyan egyszerű…

“Média átalakítása és streamelése serverless módon” olvasásának folytatása

Specifikus node.js verzió telepítese Linux Docker konténerre

Ismét egy olyan problémába futottam, aminek a megoldása egy jó adag keresgélést és kísérletezést húzott maga után, úgyhogy megosztom a megoldást, hátha valakinek leegyszerűsítem a dolgát.

“Specifikus node.js verzió telepítese Linux Docker konténerre” olvasásának folytatása

CellPainting és görgetés/átméretezés a DataGridViewban

A WinForms még létezik, és időnként emlékeztet arra, hogy meg kell adni neki a kora miatt kijáró tiszteletet. 🙂 Sajnos ezt képes úgy elkövetni, hogy átmegy kiszámíthatatlanba.

“CellPainting és görgetés/átméretezés a DataGridViewban” olvasásának folytatása

Nyelvi aszinkronitás Windows Phone-on

Ne blogolj éjjel! Rögtön miután közzétettem a tegnapi bejegyzést, leesett, hogy eredetileg nem csak a Taskokig akartam bemutatni a UI tehermentesítését, hanem továbbmenni egy lépéssel, és megmutatni, hogy hogyan lehet WP7 alatt a C# 5.0-ban megjelent nyelvi aszinkronitást felhasználni.

“Nyelvi aszinkronitás Windows Phone-on” olvasásának folytatása

Task-alapú párhuzamosítás Windows Phone 7 alatt

A minap arról kérték a véleményemet, hogy hogyan érdemes WP7 alatt kódot a UI-száltól függetlenül futtatni, merthogy a Threadek (szálak) használata körülményessé tud válni, az APM pedig… APM. Nem kell magyarázni. 🙂 A válasz természetesen az, hogy Taskokkal érdemes. Erre persze az volt a válasz, hogy dehát Taskok nincsenek WP7 alatt…

“Task-alapú párhuzamosítás Windows Phone 7 alatt” olvasásának folytatása

Beágyazott böngésző képességeinek tiltása

…rövidebben: “IE! Shut up!”

Nemrég épp a falat kapartam, mert egy .NET programban egy “félig rejtett” böngészőt kellett futtatnom, tesztelés gyanánt, és abban pedig újra és újra betöltenem egy weboldalt. Ilyenkor persze jöttek a kattogó hangok. Automatikusan. Folyamatosan. Egyre csak.

Ha szembetalálkoztál már te is a problémával, hogy a nyomoronc WebBrowser kattog, mintha elromlott volna, és szeretnéd egyszerűen megoldani, akkor itt a megoldás:

InternetFeatureController.SetFeature(
    InternetFeature.DisableNavigationSounds, true);

Természetesen ha ez ilyen sima ügy lenne, szebb lenne a világ… Kell hozzá pár tucat sor P/Invoke meg egyebek, de az a háttérben marad – itt letölthető a solution, mely tartalmazza a DLL-t, amit csak be kell referálni a programba; illetve egy WinForms példaprogramot.

Két megjegyzés:

– Ha Windows szinten van kikapcsolva a kattogás, akkor itt se lesz. 🙂

– A fenti kód (illetve a dll) csak Windows XP SP2-től működik.

További infó az egyes letintható/engedélyezhető feature-ökről itt található.

Tekintve, hogy mindjárt itt a Build harmadik napjának nyitánya… irány vissza, kódolni. Csendben. Kattogás nélkül.

Word – mezők használata kódból

Ezúttal az eddigiektől kicsit eltérő dologról lesz szó. Annyiban kapcsolódik a korábbiakhoz, hogy ebben is lesz egy kis kódolás, amivel egy konkrét problémára találunk megoldást. 🙂

Ha valaha készítettek már körlevelet a Worddel (omg, nekünk ez komoly tananyag volt gimiben), vagy elhelyeztetek oldalszámot stb.-t egy doksiban, akkor már ismerős lehet a wordmezők vagy űrlapmezők fogalma. Nemrég egyik barátom feladatul kapta, hogy olyan programot kell készítenie, amely előre elkészített, mezőket tartalmazó word doksikat dolgoz fel, és a mezők helyére beilleszt valamit – szöveget, képet -, amit a program logikázott ki. Segítségemet kérte, így jött szembe a probléma, hogy tulajdonképpen még sosem kellett ilyen “template”-ekkel dolgoznom, általában az utolsó betűig kódból generáltam a doksikat. 🙂

Űrlapmező létrehozásaElső lépésként hozzunk létre egy word dokumentumot, és helyezzünk el benne néhány mezőt. (Így visszagondolva ez volt talán a legbonyolultabb része a feladatnak. 🙂 A Word beállításai közé kell bemászni, és valahol, egy jól eldugott helyen létrehozni egy új fület a ribbonon… Fájl, Beállítások, Menüszalag testreszabása, majd a baloldali listán az “Űrlapmező” parancsot kell megkeresni, és átrakni a jobb oldali listába.) A mezőknek lehetőleg adjunk értelmes nevet. Nálam ez “alma”, “béka” stb. lett.*

A program elkészítésének első lépése természetesen a szükséges Word Interop dll beemelése a program referenciái közé:  Microsoft.Office.Interop.Word.dll – vigyázzunk, mert általában mindjárt 2-4féle van a gépünkön. Ez után pedig az azonos nevű névtér beusingolása. (Nyelvújítunk, na…)

using Microsoft.Office.Interop.Word;

A Word elindítása és a korábban elkészített doksi megnyitása a szokásos (az elérési utat lerövidítettem, amúgy egy abszolút út):

var word = new Application();
Document doc = word.Documents.Open(@"c:\Users\...\tesztdoksi.docx");

Jön a lényeg, a mezők feltöltése. A mezőket a dokumentum FormFields listáján keresztül tudjuk elérni. A Name tulajdonságot megvizsgálva tudjuk kiválasztani a nekünk tetszőt, illetve, ha adtunk neki (alapértelmezett) értéket, azt a Result tulajdonságból kapjuk meg, és itt is tudjuk megváltoztatni:

foreach (FormField ff in doc.FormFields)
{
    if (ff.Name == "alma")
    {
        ff.Result = "ez itten kódbul van...";
    }
    //...
}

Ennek a megoldásnak egy apró hátulütője, hogy a mező bent marad a dokumentumban (szürke háttere lesz a szövegnek). Ha ténylegesen be akarjuk illeszteni a szöveget a mező helyére, akkor a legegyszerűbb, ha nem a Resultot állítjuk be, hanem kiválasztjuk az egész mezőt, és lecseréljük a szövegre. Valahogy így:

foreach (FormField ff in doc.FormFields)
{
    if (ff.Name == "alma")
    {
        ff.Select();
        word.Selection.Text = "ez itten kódbul van...";
    }
    //...
}

Ha most mentjük a doksit, látható, hogy a mezők eltűntek, és kicserélődtek magára a szövegre. Helyzetfüggő, hogy melyik megoldást mikor érdemes alkalmazni…

Izgalmasabb a dolog, ha egy adatforráshoz kapcsolt dokumentum adatmezőit akarjuk ilyen módon feltölteni. Jellemzően ez a helyzet körlevelek esetén. Ezek a mezők nem a FormFields listába kerülnek, hanem a Fields listába. Ha név alapján akarjuk kiválasztani őket, akkor pedig számítanunk kell arra, hogy a nevüket is kiegészíti a Word: a nevet a Field objektum Code tulajdonságának Text tulajdonságában találjuk, de  a Word hozzáfűzi a saját okosságát is, így az “alma” néven létrehozott mező neve ” MERGEFIELD \”alma\” ” lesz. Az egyszerűség kedvéért most nem vagdalkozunk, csak azt vizsgáljuk, hogy a mező neve tartalmazza-e a keresett szót. A többi már egyezik:

foreach (Field f in doc.Fields)
{
    if (f.Code.Text.Contains("alma"))
    {
        f.Select();
        word.Selection.Text = "ez itten kódbul van...";
    }
    //...
}

Gondolom, mondanom sem kell, hogy a Contains metódus használhatósága drámaian csökken, ha mondjuk van egy alma és egy almabéka nevű mezőnk is, ahogy az nálam gyakran előfordul. 🙂

Ezután menthetjük a dokumentumot, bezárhatjuk a wordöt stb, a lényeg, hogy a mezők segítségével sikerült összeraknunk egy olyan template-et, amelynek kimaradt részeit utána kódból egyszerűen feltölthettük.

*: Ha nagyon nem akarunk kattintgatni, akkor létrehozhatjuk a mezőket Word Interoppal is. A fentebb bemutatott FormFields tulajdonság Add metódusát felhasználva beszúrhatunk ilyeneket kódból is.

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English

Najó, most már kötelezőnek érzem… Szóval: és most vissza kódolni. 🙂

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English
AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDetect languageDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddishAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBulgarianCatalanChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekHaitian CreoleHebrewHindiHungarianIcelandicIndonesianIrishItalianJapaneseKoreanLatinLatvianLithuanianMacedonianMalayMalteseNorwegianPersianPolishPortugueseRomanianRussianSerbianSlovakSlovenianSpanishSwahiliSwedishThaiTurkishUkrainianUrduVietnameseWelshYiddish

English (auto-detected) » English