Unit Converter

C# .NET WPF Unit Converter

Aplikácia vytvorená pre súťaž Machr na C# .NET - Vícejazyčná aplikace. Aplikácia je lokalizovaná do 51 svetových jazykov pomocou Yandex Translate API. Je jednoducho rozšíriteľná o ďalšie veličiny, či jednotky. Taktiež slúži ako praktická ukážka objektového prístupu k Xml súborom - LINQ to XML.

Algoritmus výpočtu

Algoritmus výpočtu je triviálny. Funguje na takomto princípe:

výsledok = hodnota * odchýlkaVstupnejJednotky / odchýlkaVýstupnejJednotky

Príklad:

<Unit offset="0,001">mg</Unit> <!-- Vstupná jednotka -->
<Unit offset="1000">Kg</Unit> <!-- Výstupná jednotka -->
232 mg * 0,001 / 1000 = 0,000232 kg

Odchýlka (offset) je odchýlka od základnej jednotky danej veličiny napr. 1kg = 1000g - g(gram) je v tomto prípade základná jednotka tzn. od nej sa odvodzujú vzťahy k ostatným jednotkám danej veličiny.

Pridávanie veličín/jednotiek

Pridávanie veličín sa uskutočňuje v súbore quantities.xml, ktorý sa nachádza v zložke zo samotnou aplikáciu. Princíp rozšírenia je jednoduchý: Medzi tagy <Quantities></Quantities> pridáme nový element <Quantity>, do ktorého vnoríme ľubovoľný počet elementov Unit (jednotka), pričom jeden z týchto elementov musí byť základná jednotka (offset="1"). Atribút offset definuje vzťah medzi atribútom offset základnej jednotky a ním samotným:

1 meter = 0,001 milimeter

Príklad:

<Quantity name="Length">
  <Unit offset="0,000000001">nm</Unit>
  <Unit offset="0,000001">μm</Unit>
  <Unit offset="0,001">mm</Unit>
  <Unit offset="0,01">cm</Unit>
  <Unit offset="0,1">dm</Unit>
  <Unit offset="1">m</Unit>
  <Unit offset="1000">Km</Unit>
  <Unit offset="1609,344">m(mile)</Unit>
</Quantity>

Použitie Yandex Translate API

Pre preklad aplikácie je použitá prekladacia API od spoločnosti Yandex. Túto cestu som si zvolil kvôli jednoduchosti použitia a taktiež kvôli tomu, že Microsoft Translator od Bing-u momentálne vstupuje do druhej verzie a žiadny web (ani StackOverflow :D ) nevie presne vysvetliť ako funguje. Pre používanie tejto API je nutné získať tzv. ApiKey, ktorý je možné bezplatne získať na tejto adrese.

Samotné použitie je realizované cez triedu WebClient, ktorá sa nachádza v .NET framework-u od verzie 4.5. Tvar požiadavky je následovný:

https://translate.yandex.net/api/v1.5/tr/translate?key=ApiKey&lang=inputLanguage-outputLanguage&text=text

Príklad:

WebClient webClient = new WebClient();
webClient.Encoding = Encoding.UTF8;
string apiKey = "trnsl.1.1.xxxxxxxxxxxxxxx.xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxx";

string request = "https://translate.yandex.net/api/v1.5/tr/translate?key=" + apiKey + "&lang=" + inputLanguage + "-" + outputLanguage + "&text=" + text;
XDocument = XDocument.Parse(webClient.DownloadString(request));

var query = from x in XDocument.Element("Translation").Elements("text")
            select x.Value;

string translatedText = query.ElementAt(0);

V kóde, ktorý je na stiahnutie sa nachádza API kľúč, ktorý som použil pri vývoji tejto aplikácie. Je vám k dispozícii.


Galerie

Program byl vytvořen v roce 2015.

 

Stáhnout

Staženo 14x (293.85 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Program pro vás napsal Štefan Pružinský
Avatar
Autor je mladý programátor webových aj desktopových aplikácii. Jeho hlavné pole pôsobnosti je platforma .NET a programovací jazyk C#. Vyvíja v ňom rôzne (aj) multiplatformové aplikácie. V budúcnosti by sa chcel stať komplexným programátorom. :)

Jak se ti líbí článek?
Celkem (3 hlasů) :
55555


 


Miniatura
Všechny články v sekci
Okenní aplikace v C# .NET WPF

 

 

Komentáře

Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

Vcelku pěkné..
Nevíš proč se to zasekává při změně jazyka? Zamrzne to tak na 3s, což mi přijde neúměrné množství textu a výkonu mého PC :D

Odpovědět 29.7.2015 12:37
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na David Novák
Ondřej Štorc:

Nebude to možná tím že čeká na odpověď toho servru, kterej to překládá?

Odpovědět  +3 29.7.2015 12:45
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na David Novák
Štefan Pružinský:

Problém je v tom, že je to zrealizované dosť neprakticky...na každé slovo posielam jeden request na server, ktorý mi pošle preklad. Mohol by som jednoducho poslať všetky slová vrámci jedného request-u a bolo by to oveľa rýchlejšie...pro­blém bol v tom, že sa mi to už v pondelok o 1:00 nechcelo dokončiť. Skúsim to opraviť teraz. :)

Editováno 29.7.2015 12:56
Odpovědět 29.7.2015 12:56
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na David Novák
Štefan Pružinský:

Tak, už je to opravené. :) Všetky popisky sa prekladajú prostredníctvom jedného requestu. Inak, neviem prečo to nechalo starú miniatúru... :(

Odpovědět 3.8.2015 21:00
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Mackapsova
Člen
Avatar
Mackapsova:

Si mladík? :DD

 
Odpovědět 16.10.2015 21:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.