diff --git a/appengine/app.yaml b/appengine/app.yaml index bf87b6515..90fbd00a2 100644 --- a/appengine/app.yaml +++ b/appengine/app.yaml @@ -26,14 +26,6 @@ handlers: - url: /static/apps/code/(de|en|hu|vi|zh_tw)\.html static_files: redirect.html upload: redirect.html -# Plane moved to index.html on 7 Aug 2013. -- url: /static/apps/plane/plane\.html - static_files: redirect.html - upload: redirect.html -# Plane became language-agnostic on 20 Jul 2013. -- url: /static/apps/plane/(1_|2_)?(en|hu|vi|vn)\.html - static_files: redirect.html - upload: redirect.html # Puzzle moved to Blockly Games on 15 Oct 2014. - url: /static/apps/puzzle/.* static_files: redirect.html @@ -50,6 +42,10 @@ handlers: - url: /static/apps/graph/.* static_files: redirect.html upload: redirect.html +# Plane moved from apps to demos on 13 Nov 2014. +- url: /static/apps/plane/.* + static_files: redirect.html + upload: redirect.html # Block Factory moved from apps to demos on 16 Oct 2014. - url: /static/apps/blockfactory/.* static_files: redirect.html diff --git a/appengine/redirect.html b/appengine/redirect.html index 28d213f00..e1b92efd1 100644 --- a/appengine/redirect.html +++ b/appengine/redirect.html @@ -62,6 +62,9 @@ if (loc.match('/apps/puzzle/')) { if (loc.match('/apps/graph/')) { // Graph moved from apps to demos on 10 Nov 2014. loc = loc.replace('/apps/', '/demos/'); +} else if (loc.match('/apps/plane/')) { + // Graph moved from apps to demos on 10 Nov 2014. + loc = loc.replace('/apps/', '/demos/'); } else if (loc.match('/apps/blockfactory/')) { // Block Factory moved from apps to demos on 16 Oct 2014. loc = loc.replace('/apps/', '/demos/'); diff --git a/apps/code/generated/ace.js b/apps/code/generated/ace.js index cea66014d..8b45899d5 100644 --- a/apps/code/generated/ace.js +++ b/apps/code/generated/ace.js @@ -41,7 +41,7 @@ codepage.messages = function(opt_data, opt_ignored, opt_ijData) { codepage.start = function(opt_data, opt_ignored, opt_ijData) { - return codepage.messages(null, null, opt_ijData) + ' - - - +

Blockly Apps

+ +

Blockly is a graphical programming environment. Below are some sample + applications that use Blockly.

+ + + + + + +
+ + + + +
Code
+
Export a Blockly program into JavaScript, Python, Dart or XML.
+
+ +

Blockly is free and open source. To contribute code or translations to + Blockly, or to use Blockly in your own app, visit + developers.google.com/blockly.

+ diff --git a/apps/index/generated/ace.js b/apps/index/generated/ace.js deleted file mode 100644 index 62b67dc62..000000000 --- a/apps/index/generated/ace.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '
Ruweuëng meuprogram ban leumahTeutheunEu kode JavaScript yang geupeuhaséKeubah ngon neupawôt keu theunNeupeujak program nyang geupeuteutap le seuneutheun lam ruweuëng keurijaPeujak programAtô keulayiKa gotPeubateuëLogisKuwienMatematikHaraihDapeutaWareunaMeumacamProsedurNa masalah lam neumeulakèeNeubagi seuneutheun droëneuh ngon peunawôt nyoë: %1Meu\'ah, \'%1\' hana saban sakri ngon peuë mantong program nyang meukeubahBeureukaih keuneubah droëneuh han jeuët geupasoë. Kadang na neupeugot ngon versi seuneutheun yang la\'éndapeutaharaih
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplikasi seuneutheunBlockly nakeuh bibeuëh ngon meunè nyang teuhah.\nSoë mantong nyang meuripèe kode atawa teujeumah keu Blockly, atawa geungui Blockly lam aplikasi droëneuh, neukunjông %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplikasi seuneutheun

Blockly nakeuh ruweuëng meuprogram grafis. Dimeuyub nyoë nakeuh meupadum boh conto aplikasi nyang geunguy Blockly.
Kode
Neu eksport program Blockly u dalam JavaScript, Phyton atawa XMK.
Peukakah Bileuëng Kurusi Kapai Teureubang.
Neupeuglah masalah matematik ngon saboh atawa dua kri neuubah.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ar.js b/apps/index/generated/ar.js deleted file mode 100644 index 01abc57d2..000000000 --- a/apps/index/generated/ar.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

بيئة برمجة مرئيةبلوكليراجع إنشاء تعليمات برمجية JavaScript.احفظ ووصلة إلى البلوكات.شغل البرنامج المعرف بواسطة البلوكات في مساحة العمل.شغِّل البرنامجإعادة ضبطحسنإلغاء الأمرمنطقالحلقاترياضياتنصقوائملونمتغيراتإجراءاتكانت هناك مشكلة مع هذا الطلب.مشاركة كود بلوكلي الخاص بك مع هذا الرابط:\n %1عذراً،ال \'%1\' لا تتوافق مع أي برنامج تم حفظه.تعذر تحميل الملف المحفوظة الخاصة بك. ربما تم إنشاؤه باستخدام إصدار مختلف من بلوكلي؟قائمةنص
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
تطبيقات بلوكلييعتبر "بلوكلي" مصدر مجاني ومفتوح. للمٌساهمة في الكود أو الترجمات الخاصة بـ بلوكلي, او لاستخدام بلوكلي في التطبيق الخاص بك, يرجى زيارة %1
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

تطبيقات بلوكلي

يعتبر "بلوكي" بيئة برمجية ورسومية في آن واحد. ستجد أدناه بعض النماذج لتطبيقات تستعمل بلوكلي.
كود
صدر برنامج بلوكلي إلى جافاسكريبت، بايثون، دارت أو XML.
آلة حاسبة لمقعد الطائرة
حل مشكلة رياضيات في متغير واحد أو متغيرين.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/az.js b/apps/index/generated/az.js deleted file mode 100644 index 90e0be56b..000000000 --- a/apps/index/generated/az.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.Run ProgramResetTAMAMLəğv etLogicLoopsMathMətnSiyahılarRəngDəyişənlərFunksiyalarSorğu ilə əlaqəli problem var.Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?siyahımətn
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly-qrafik proqram təminatıdır. Aşağıda Blockly-dən istifadə edən əlavələrin nümunələri göstərilmişdir.
Kod
Blockly proqramını JavaScript, Python, Dart və ya XML formatına çevirin.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/be-tarask.js b/apps/index/generated/be-tarask.js deleted file mode 100644 index e466da7ff..000000000 --- a/apps/index/generated/be-tarask.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Асяродзьдзе віртуальнага праграмаваньняBlockly (Блоклі)Глядзі згенераваны код JavaScript.Захаваць і зьвязаць з блёкамі.Запусьціце праграму, вызначаную блёкамі ў працоўнай вобласьці.Запусьціць праграмуСкасавацьOKСкасавацьЛёгікаПетліМатэматычныя формулыТэкстСьпісыКолерЗьменныяФункцыіУзьнікла праблема з запытам.Падзяліцца Вашым блёкам праз гэтую спасылку:\n\n%1Прабачце, \'%1\' не адпавядае ніводнай захаванай праграме.Не атрымалася загрузіць захаваны файл. Магчыма, ён быў створаны з іншай вэрсіяй Блёклі?сьпістэкст
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Дастасаваньні БлокліБлоклі - гэта вольны рэсурс з адкрытым кодам. Каб падзяліцца сваім кодам ці перакладамі Блоклі або выкарыстоўваць Блоклі ва ўласных даставаньнях наведайце %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Дастасаваньні Блоклі

Блоклі - гэта графічнае асяродзьдзе праграмаваньня. Ніжэй знаходзяцца некалькі прыкладаў дастасаваньняў якія выкарыстоўваюць Блоклі.
Код
Экспартуйце праграму Блоклі на JavaScript, Python, Dart ці XML.
Калькулятар месцаў у самалёце
Рашыце матэматычную задачу з адной ці некалькімі пераменнымі.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/br.js b/apps/index/generated/br.js deleted file mode 100644 index e75bb6db2..000000000 --- a/apps/index/generated/br.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un endro programmiñ da weletBlocklyGwelet ar c\'hod JavaScript krouet.Enrollañ ha liammañ d\'ar bloc\'hadoù.Lañsañ ar programm termenet gant ar bloc\'hadoù en takad labour.Lañsañ ar programmAdderaouekaatMat eoNullañPoellBoukloùMatematikTestennRolloùLivArgemmennoùArc\'hwelioùUr gudenn zo gant ar reked.Rannañ ho ploc\'hoù gant al liamm-mañ :\n\n%1Digarezit. "%1" ne glot gant programm enrollet ebet.Ne c\'haller ket kargañ ho restr enrollet. Marteze e oa bet krouet gant ur stumm disheñvel eus Blockly ?rolltestenn
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Arloadoù BlocklyFrank ha gant kod tarzh digor eo Blockly. Evit degas ho lod er c\'hod hag e troidigezhioù Blockly, pe evit implijout Blockly en hoc\'h arload, kit war %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Arloadoù Blockly

Un endro programmiñ grafek. Kavout a reot amañ dindan un nebeud skouerioù eus arloadoù a implij Blockly.
Kod
Ezporzhiañ ur programm Blockly e JavaScript, Python, Dart pe XML.
Jederez azezenn nijerez
Diskoulmañ ur skoulmad matematikoù gant un argemmenn pe ziv.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ca.js b/apps/index/generated/ca.js deleted file mode 100644 index 6e4b87ffd..000000000 --- a/apps/index/generated/ca.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un entorn visual de programacióBlocklyVegeu el codi JavaScript generat.Desa i enllaça als blocs.Executa el programa definit pels blocs de l\'àrea de treball.Executa el programaReinicialitzaD\'acordCancel·laLògicaBuclesMatemàtiquesTextLlistesColorVariablesProcedimentsHi ha hagut un problema amb la sol·licitud.Comparteix els teus blocs amb aquest enllaç: %1Ho sentim, \'%1\' no es correspon amb cap fitxer desat de Blockly.No s\'ha pogut carregar el teu fitxer desat. Potser va ser creat amb una versió diferent de Blockly?llistatext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicacions BlocklyBlockly és gratis i de codi font lliure. Per contribuir amb codi o amb traduccions a Blockly, o per usar Blockly en la vostra app, visiteu %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicacions Blockly

Blockly és un entorn de programació gràfic. A continuació trobareu algunes aplicacions que usen Blockly.
Codi
Exporteu un programa Blockly a JavaScript, Python, Dart o XML.
Calculadora de seients d\'avió
Resoldre un problema matemàtic amb una o dues variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/cs.js b/apps/index/generated/cs.js deleted file mode 100644 index 1dea0a530..000000000 --- a/apps/index/generated/cs.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

grafické programovací prostředíBlocklyZobrazit generovaný JavaScriptový kód.Ulož a spoj bloky..Run the program defined by the blocks in the workspace.Spusť programResetOKZrušitLogikaSmyčkyMatematikaTextSeznamyBarvaProměnnéProceduryDošlo k potížím s požadavkem.Sdílej bloky tímto odkazem: \n\n%1Omlouváme se, \'%1\' nesouhlasí s žádným z uložených souborů.Nepodařilo se uložit vás soubor. Pravděpodobně byl vytvořen jinou verzí Blockly?seznamtext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplikace BlocklyBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplikace Blockly

Blockly je grafické programovací prostředí. Níže jsou uvedeny některé ukázkové aplikace, které používají Blockly.
Kód
Exportujte Blockly program do JavaScriptu, Pythonu, Dartu nebo XML.
Kalkulačka míst v sedadle
Vyřešte matematický problém s jednou nebo dvěma proměnnými.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/da.js b/apps/index/generated/da.js deleted file mode 100644 index 62236680e..000000000 --- a/apps/index/generated/da.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

et visuelt programmeringsmiljøBlocklySe den genererede JavaScript kode.Gem og link til blokke.Kør programmet, der er defineret af blokkene i arbejdsområdet.Kør programNulstilOKAfbrydLogikLøkkerMatematikTekstListerFarveVariablerFunktionerDer var et problem med forespørgslen.Del dine blokke med dette link:\n\n%1Beklager, \'%1\' passer ikke med nogen gemt Blockly fil.Kunne ikke hente din gemte fil. Måske er den lavet med en anden udgave af Blockly?listetekst
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly programmerBlockly er gratis og open source. For at bidrage kode eller oversættelser til Blockly eller bruge Blockly i dit eget program, kan du besøge %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly programmer

Blockly er et grafisk programmeringsmiljø. Nedenfor er nogle eksempler på programmer der bruger Blockly.
Kode
Eksportér et Blockly program til JavaScript, Python, Dart eller XML.
Flysædelommeregner
Løs et matematisk problem med en eller to variabler.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/de.js b/apps/index/generated/de.js deleted file mode 100644 index ce5579b4a..000000000 --- a/apps/index/generated/de.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Visuelle ProgrammierumgebungBlocklyErzeugten JavaScript-Code ansehen.Speichern und auf Bausteine verlinken.Das Programm ausführen, das von den Bausteinen im Arbeitsbereich definiert ist.Programm ausführenZurücksetzenOkayAbbrechenLogikSchleifenMathematikTextListenFarbeVariablenFunktionenMit der Anfrage gab es ein Problem.Teile deine Bausteine mit diesem Link:\n\n%1„%1“ stimmt leider mit keinem gespeicherten Programm überein.Deine gespeicherte Datei konnte nicht geladen werden. Vielleicht wurde sie mit einer anderen Version von Blockly erstellt.ListeText
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly-AnwendungenBlockly ist frei und Open Source. Um Code oder Übersetzungen für Blockly beizusteuern oder um Blockly in deiner eigenen Anwendung zu verwenden, besuche %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly-Anwendungen

Blockly ist eine grafische Programmierumgebung. Unten sind einige Beispielanwendungen, die Blockly verwenden.
Code
Ein Blockly-Programm als JavaScript, Python, Dart oder XML exportieren.
Flugzeugsitzrechner
Ein mathematisches Problem mit einer oder zwei Variablen lösen.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/diq.js b/apps/index/generated/diq.js deleted file mode 100644 index 77e820f60..000000000 --- a/apps/index/generated/diq.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

yew grafikê programkerdışê dormeyBlocklyKodê JavaScriptê vıraştey bımocne.Qeyd ke û be blokan ra gıre de.Cayê kari de programo ke terefê blokan ra name biyo, ey bıgurene.Programi Akar fiReset kerêTEMAMBıtexelneMantığDingekiMatematikMetinListeyRengVırneyeniFonksiyoniwaştışi deyne zew problem estoBlokan na linkera bıhesrne\n\n%1Melûlime, \'%1\' be qet yew programi ra yewbini nêgêno.Could not load your saved file. Perhaps it was created with a different version of Blockly?listenuşte
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Kod
Export a Blockly program into JavaScript, Python, Dart or XML.
Hesabkerdoğê Cayê Tiyarey
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/el.js b/apps/index/generated/el.js deleted file mode 100644 index 70ba22128..000000000 --- a/apps/index/generated/el.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

γραφικό περιβάλλον προγραμματισμούBlockly (Μπλόκλι)Δες τον κώδικα JavaScript που δημιουργήθηκε.Αποθηκεύει και συνδέει σε μπλοκ.Εκτελεί το πρόγραμμα που ορίζεται από τα μπλοκ στον χώρο εργασίας.Εκτέλεση ΠρογράμματοςΕπανεκκίνησηΕντάξειΑκύρωσηΛογικήΕπαναλήψειςΜαθηματικάΚείμενοΛίστεςΧρώμαΜεταβλητέςΣυναρτήσειςΥπήρξε πρόβλημα με το αίτημα.Κοινοποίησε τα μπλοκ σου με αυτόν τον σύνδεσμο:\n\n%1Λυπάμαι, το «%1» δεν αντιστοιχεί σε κανένα αποθηκευμένο πρόγραμμα.Δεν μπορώ να φορτώσω το αποθηκευμένο αρχείο σου. Μήπως δημιουργήθηκε από μία παλιότερη έκδοση του Blockly;λίστακείμενο
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Εφαρμογές BlocklyTo Blockly είναι ανοικτού κώδικα και δωρεάν. Για να συνεισφέρετε σε κώδικα ή μεταφράσεις στο Blockly, ή για να χρησιμοποιήσετε το Blockly στη δική σας εφαρμογή, επισκεφτείτε το %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Εφαρμογές Blockly

Το Blockly είναι ένα γραφικό περιβάλλον προγραμματισμού. Παρακάτω είναι μερικά δείγματα εφαρμογών που χρησιμοποιούν το Μπλόκλι.
Κώδικας
Για να εξάγεις πρόγραμμα γραμμένο σε Μπλόκλι στις γλώσσες JavaScript, Python, Dart ή XML.
Υπολογισμός Θέσεων Σε Αεροπλάνο
Λύσε μαθηματικό πρόβλημα με μία ή δύο μεταβλητές.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/en.js b/apps/index/generated/en.js deleted file mode 100644 index f45f7ebc7..000000000 --- a/apps/index/generated/en.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.Run ProgramResetOKCancelLogicLoopsMathTextListsColourVariablesFunctionsThere was a problem with the request.Share your blocks with this link:\n\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?listtext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Code
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/es.js b/apps/index/generated/es.js deleted file mode 100644 index 98be548c5..000000000 --- a/apps/index/generated/es.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un entorno de programación visualBlocklyMira el código JavaScript generado.Guarda conexión a los bloques.Ejecute el programa definido por los bloques en el área de trabajo.Ejecutar el programaRestablecerAceptarCancelarLógicaSecuenciasMatemáticasTextoListasColorVariablesFuncionesHubo un problema con la petición.Comparte tus bloques con este enlace:\n\n%1«%1» no corresponde con ningún programa guardado.No se pudo cargar el archivo guardado. ¿Quizá fue creado con otra versión de Blockly?listatexto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Apps de BlocklyBlockly es gratuito y de código abierto. Para contribuir con el código o las traducciones de Blockly, o para utilizar Blockly en tu propia aplicación, visita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Apps de Blockly

Blockly es un entorno gráfico de programación. A continuación se presentan algunas aplicaciones de ejemplo que utilizan Blockly.
Código
Exportar un programa Blockly en JavaScript, Python, Dart o XML.
Calculadora de asientos de avión
Resuelve un problema matemático con una o dos variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/eu.js b/apps/index/generated/eu.js deleted file mode 100644 index f388b992a..000000000 --- a/apps/index/generated/eu.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklyIkusi sorturiko JavaScript kodea.Gorde eta lotura sortu.Run the program defined by the blocks in the workspace.Programa exekutatuBerriz hasiAdosUtziLogikaBegiztakMatematikaTestuaZerrendakKoloreaAldagaiakProzedurakEskaerarekin arazo bat egon da.Elkarbanatu blokeak lotura honekin:\n\n%1Barkatu, «%1» ez dator bat gordetako ezein programarekin.Ezin izan da zure fitxategia kargatu. Agian Blockly-ren beste bertsio batekin sortua izan zen?zerrendatestua
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Kodea
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/fa.js b/apps/index/generated/fa.js deleted file mode 100644 index df834263d..000000000 --- a/apps/index/generated/fa.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

یک محیط برنامه\u200Cنویسی بصریبلوکیدیدن کد جاوااسکریپت ایجادشده.ذخیره و پیوند به بلوک\u200Cها.اجرای برنامهٔ تعریف\u200Cشده توسط بلوک\u200Cها در فضای کار.اجرای برنامهاز نوتأییدلغومنطقحلقه\u200Cهاریاضیمتنفهرست\u200Cهارنگمتغییرهاتوابعمشکلی با درخواست وجود داشت.اشتراک\u200Cگذاری بلاک\u200Cهایتان با این پیوند:\n\n%1شرمنده، «%1» با هیچ برنامهٔ ذخیره\u200Cشده\u200Cای تطبیق پیدا نکرد.نتوانست پروندهٔ ذخیرهٔ شما بارگیری شود. احتمالاً با نسخهٔ متفاوتی از بلوکی درست شده\u200Cاست؟فهرستمتن
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
برنامه\u200Cهای بلوکلیبلوکلی رایگان و متن\u200Cباز است. برای مشارکت کد یا ترجمهٔ بلوکلی یا استفاده از بلوکلی در برنامهٔ خودتان، %1 را ببینید.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

برنامه\u200Cهای بلوکلی

بلوکلی یک محیط برنامه\u200Cنویسی گرافیک است. در زیر نمونه برنامه\u200Cهایی وجود دارد که از بلوکلی استفاده می\u200Cکند.
کد
خارج\u200Cسازی یک برنامه بلوکلی به جاوااسکریپت، پایتون، دارت و اکس\u200Cام\u200Cال.
محاسبه\u200Cگر صندلی\u200Cهای هواپیما
حل یک مسألهٔ ریاضی با یک یا دو متغییر.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/fi.js b/apps/index/generated/fi.js deleted file mode 100644 index 352aa59fd..000000000 --- a/apps/index/generated/fi.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

visuaalinen ohjelmointiympäristöBlocklyKatso luotua JavaScript-koodia.Save and link to blocks.Run the program defined by the blocks in the workspace.Suorita ohjelmaNollaaOKPeruutaKirjauduLoopsMathTekstiListsVäriMuuttujatFunctionsThere was a problem with the request.Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?listteksti
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Koodi
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/fr.js b/apps/index/generated/fr.js deleted file mode 100644 index bc744065e..000000000 --- a/apps/index/generated/fr.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un environnement de programmation visuelBlocklyVoir le code JavaScript généré.Sauvegarder et lier aux blocs.Lancer le programme défini par les blocs dans l’espace de travail.Exécuter le programmeResetOKAnnulerLogiqueBouclesMathTexteListesCouleurVariablesFonctionsIl y a eu un problème avec la demande.Partagez vos blocs grâce à ce lien:\n\n%1Désolé, \'%1\' ne correspond à aucun programme sauvegardé.Impossible de charger le fichier de sauvegarde. Peut être a t-il été créé avec une autre version de Blockly?listetexte
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Applications BlocklyBlockly est libre et avec code ouvert. Pour contribuer au code ou aux traductions de Blockly, ou pour utiliser Blockly dans votre propre application, allez sur %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Applications Blockly

Blockly est un environnement de programmation graphique. Ci-dessous quelques exemples d’application qui utilisent Blockly.
Code
Exporter un programme Blockly en JavaScript, Python, Dart ou XML.
Calculateur de sièges d’avion
Résoudre un problème de math avec une ou deux variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/gl.js b/apps/index/generated/gl.js deleted file mode 100644 index 2e76eb361..000000000 --- a/apps/index/generated/gl.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un contorno de programación visualBlocklyVer o código JavaScript xerado.Gardar e crear unha ligazón aos bloques.Executar o programa definido polos bloques no espazo de traballo.Executar o programaRestablecerAceptarCancelarLóxicaBuclesMatemáticasTextoListasCorVariablesFunciónsHoubo un problema coa solicitude.Comparte os teus bloques con esta ligazón:\n\n%1Sentímolo, "%1" non se corresponde con ningún programa gardado.Non se puido cargar o ficheiro gardado. Se cadra, foi creado cunha versión diferente de Blockly.listatexto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicacións de BlocklyBlockly é gratuíto e de código aberto. Para achegar código ou traducións a Blockly, ou para usar Blockly na túa propia aplicación, visita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicacións de Blockly

Blockly é un contorno de programación gráfico. A continuación hai algúns exemplos de aplicacións que usan Blockly.
Código
Exporta un programa de Blockly en JavaScript, Python, Dart ou XML.
Calculadora de asentos de avión
Resolve un problema matemático dunha ou dúas variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/gn.js b/apps/index/generated/gn.js deleted file mode 100644 index 935b57ef9..000000000 --- a/apps/index/generated/gn.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

peteĩ techa myatyrõ hekohaBlocklyEhecha JavaScript mba\'e apopyre.Oñongatu ha ombojoaju vorekuéra.Pejapo pe jejaporã vorekuéra ohechauka akue tembiapo rendápe.Pejapo pe JejaporãÑepyrũ jeyOKCancelKuaarapeTapykueguaPapapykuaaJehaipyTysýiSa\'yÑemoambuévaAporekoPeteĩ tekojepe\'y ohechauka.Temboja\'o nde vorekuéra ko joaju ndie:\n\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?tysýijehaipy
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Code
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/hak.js b/apps/index/generated/hak.js deleted file mode 100644 index 8008a49a3..000000000 --- a/apps/index/generated/hak.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.Run ProgramReset確定取消LogicLoopsSṳ-ho̍k kûng-sṳt文字列表顏色變量函數命令出現錯誤。Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.沒存到你保存个檔案。可能它係從其他版本个Blockly創建麼?列表文字
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
程式碼
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/he.js b/apps/index/generated/he.js deleted file mode 100644 index eb80fbae5..000000000 --- a/apps/index/generated/he.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

סביבת תיכנות חזותיבלוקליהצגת קוד ה־Javascript שנוצר.שמירה וקישור לקטעי קוד.הרצת התכנית שהוגדרה על ידי קטעי הקוד שבמרחב העבודה.הרץ תכניתאיפוסאישורביטוללוגיקהלולאותמתמטיקהטקסטרשימותצבעמשתניםפונקציותהבקשה נכשלה.ניתן לשתף את קטעי הקוד שלך באמצעות קישור זה:\n\n%1לצערנו, \'%1\' איננו מתאים לאף אחת מהתוכניות השמורותנסיון הטעינה של הקובץ השמור שלך נכשל. האם ייתכן שהוא נוצר בגרסא שונה של בלוקלי?רשימהטקסט
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
אפליקציות בלוקליבלוקלי הוא חינם ומבוסס קוד פתוח. בכדי לתרום קוד או תרגומים לבלוקלי, או כדי להשתמש בבלוקלי באפליקציה שלך, בקר ב־ %1
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

אפליקציות בלוקלי

בלוקלי היא סביבת פיתוח גרפית. בהמשך ישנן מספר דוגמאות לאפליקציות אשר משתמשות בבלוקלי.
קוד
ייצא תוכנית בלוקלי לג\'אווה סקריפט, פייתון או XML.
מחשבון מושב במטוס
פתור בעייה חשבונית עם משתנה אחד או שניים

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/hi.js b/apps/index/generated/hi.js deleted file mode 100644 index 5f07a3595..000000000 --- a/apps/index/generated/hi.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

एक विषुयल प्रोग्रामिंग वातावरणBlockly (ब्लॉकली)बना हुआ जावास्क्रिप्ट कोड देखें।सेव करें और ब्लॉक से लिंक करें।कार्यस्थान में ब्लॉक द्वारा वर्णन किया गया प्रोग्राम चलाएँ।प्रोग्राम चलाएँरीसेट करेंओकेरद्द करेंतर्कलूपगणितटेक्स्टसूचियाँरंगचरप्रोसीजरअनुरोध के साथ समस्या हुई।इस लिंक के साथ का अपने ब्लॉक का साझा करें:\n\n %1खेद है, \'%1\' किसी सेव किए गए प्रोग्राम से संबंधित नहीं है।आपकी सेव की गई फ़ाइल लोड नहीं हो सकी। शायद यह ब्लॉकली के किसी भिन्न संस्करण के साथ बनाई गयी थी?सूचीटेक्स्ट
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
ब्लॉकली एप्सब्लॉकली मुफ़्त और ओपन सोर्स है। ब्लॉकली का अनुवाद, कोड योगदान या आपने एप्स मे इस्तेमाल करने के लिए, %1 पर जाएँ।
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

ब्लॉकली एप्स

ब्लॉकली एक ग्राफिकल प्रोग्रामिंग वातावरण है। नीचे कुछ सैम्पल ऐप्लकेशन हैं जो की ब्लॉकली का उपयोग करते हैं।
कोड
ब्लॉकली प्रोग्राम को जावास्क्रिप्ट, पायथन या XML में निर्यात करें।
विमान सीट कैलक्यूलेटर
एक या दो चर के साथ गणित की समस्या को हल करें।

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/hrx.js b/apps/index/generated/hrx.js deleted file mode 100644 index 963b1a261..000000000 --- a/apps/index/generated/hrx.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Visuelle ProgrammierumgebungBlockly\n\nI translated all the Blockly strings into Riograndenser Hunsrückisch (Hrx / var. of German) using I.E. The translations didn\'t save - I got this message in a faded yellow background: "Saving the translation failed: Unknown error" . \n\nIn Translatewiki.net Web chat Nemo_bis suggested I try and save the translations in Chromium - I tried that and it worked. However, now I have to copy and paste all my work from IE to Chrome, unless there is another way of doing that ... \n\nNow I\'m in the process of transferring over the translations ... but they are all done (so no duplicate work is needed!).\n\n~~~~\nPaul Beppler (talk) 23:30, 12 March 2014 (UTC)Generierte Java-COde oonsiehn.Speichre und auf Bausten verlinke.Das Programm ausfüahre, das von den Bausten im Oorweitsbereich definiert ist.Programm ausführeZurücksetzeOkayAbbrecheLogikSchleifeMathematikTextListeFarrebVariableFunktioneMit der Oonfroch hots en Problem geb.Tel von dein Bausten mit dem Link:\n\n%1„%1“ stimmt leider mit kenem üweren gespeicherte Programm.Dein gespeicherte Datei könnt net gelood sin. Vielleicht woard se mit ener annre Version von Blockly erstellt.ListText
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly-OonwennungeBlockly ist frei und Open Source. Um Code orrer Üwersetzunge für Blockly beizusteire oder um Blockly in deiner eichne Oonwennung zu verwenne, besuch %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly-Oonwennunge

Blockly ist frei und Open Source. Um Code orrer Üwersetzunge für Blockly beizusteiere orrer um Blockly in deiner eichne Onwennung zu verwenne, besuch %1.
Code
En Blockly-Programm als JavaScript, Python, Dart orrer XML exportiere.
Fluchzeichsitzrechner
En mathematisches Problem mit ener orrer zwooi Variable löse.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/hu.js b/apps/index/generated/hu.js deleted file mode 100644 index dd325e355..000000000 --- a/apps/index/generated/hu.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

egy vizuális programozási környezetBlocklyA JavaScript forráskód megtekintése.Hivatkozás létrehozásaProgram futtatása.Program futtatásaAlaphelyzetElolvastamMégsemLogikai műveletekCiklusokMatematikai műveletekSztring műveletekListakezelésSzínekVáltozókEljárásokA kéréssel kapcsolatban probléma merült fel.Ezzel a hivatkozással tudod megosztani a programodat:\n\n%1Sajnos a \'%1\' hivatkozás nem tartozik egyetlen programhoz sem.A programodat nem lehet betölteni. Elképzelhető, hogy a Blockly egy másik verziójában készült?listaszöveg
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly alkalmazásokA Blockly ingyenes és nyílt forráskódú. Segítsen a forráskódban, készítsen fordítást Blocklyhoz, vagy használja a Blocklyt saját alkalmazásában, látogasson el a %1 oldalra.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly alkalmazások

A Blockly egy grafikus programozási környezet. Az alábbiakban bemutatunk néhány példa alkalmazást.
Kódszerkesztő
Blocklyval megírt programját exportálhatja JavaScript, Python, Dart vagy XML nyelven.
Repülőgép alkalmazás
Oldjon meg matematikai problémát, egy vagy két változóval.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ia.js b/apps/index/generated/ia.js deleted file mode 100644 index 0837b3bc0..000000000 --- a/apps/index/generated/ia.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un ambiente de programmation visualBlocklyVider le codice JavaScript generate.Salveguardar e ligar a blocos.Executar le programma definite per le blocos in le spatio de travalio.Executar programmaReinitialisarOKCancellarLogicaBuclasMathematicaTextoListasColorVariabilesFunctionesIl habeva un problema con le requesta.Divide tu blocos con iste ligamine:\n\n%1Infelicemente, \'%1\' non corresponde a alcun programma salveguardate.Impossibile cargar le file salveguardate. Pote esser que illo ha essite create con un altere version de Blockly?listatexto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Applicationes BlocklyBlockly es gratuite e con codice-fonte aperte. Pro contribuer codice o traductiones a Blockly, o pro usar Blockly in vostre application, visita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Applicationes Blockly

Blockly es un ambiente de programmation graphic. Ecce alcun exemplos de applicationes que usa Blockly.
Codice
Exportar un programma Blockly in JavaScript, Python, Dart o XMl.
Calculator de sedias de avion
Resolver un problema mathematic con un o duo variabiles.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/is.js b/apps/index/generated/is.js deleted file mode 100644 index dcf271de8..000000000 --- a/apps/index/generated/is.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

sjónrænt forritunarumhverfiBlocklySjá forritið sem JavaScript kóða.Vista og tengja við kubba.Keyra forritið sem kubbarnir á vinnusvæðinu mynda.Keyra forritiðByrja afturÍ lagiHætta viðRökvísiLykkjurReikningurTextiListarLitirBreyturStefjurÞað kom upp vandamál með beiðnina.Deildu kubbunum þínum með þessari krækju:Því miður, \'%1\' passar ekki við neitt vistað forrit.Gat ekki hlaðið vistuðu skrána þína. Var hún kannske búin til í annarri útgáfu af Blockly?listitexti
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly forritBlockly er ókeypis og opinn hugbúnaður. Ef þú vilt gefa kóða eða þýða fyrir Blockly eða nota það í eigin appi, líttu þá við á %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly forrit

Blockly er sjónrænt forritunarumhverfi. Hér fyrir neðan eru nokkur sýnishorn af öppum sem nota Blockly.
Kóði
Þýða Blockly forrit yfir í JavaScript, Python, Dart eða XML.
Flugsætareiknir
Leysa reikningsdæmi með einni eða tveimur breytum.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/it.js b/apps/index/generated/it.js deleted file mode 100644 index 6378abc9d..000000000 --- a/apps/index/generated/it.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un ambiente di programmazione graficoBlocklyVedi il codice JavaScript generato.Salva e collega ai blocchi.Esegui il programma definito dai blocchi nell\'area di lavoro.Esegui programmaReimpostaOKAnnullaLogicaCicliMatematicaTestoElenchiColoreVariabiliFunzioniLa richiesta non è stata soddisfatta.Condividi i tuoi blocchi con questo collegamento:\n\n%1Mi spiace, \'%1\' non corrisponde ad alcun programma salvato.Non è stato possibile caricare il documento. Forse è stato creato con una versione diversa di Blockly?elencotesto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Applicazioni BlocklyBlockly è gratuito e open source. Per contribuire al codice o alle traduzioni per Blockly, o utilizzare Blockly nella tua applicazione, visita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Applicazioni Blockly

Blockly è un ambiente di programmazione grafico. Di seguito sono riportati alcuni esempi di applicazioni che utilizzano Blockly.
Codice
Esporta un programma Blockly in JavaScript, Python, Dart o XML.
Calcolo posti aereo
Risolvi un problema di matematica con una o due variabili.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ja.js b/apps/index/generated/ja.js deleted file mode 100644 index 5ae34c2a4..000000000 --- a/apps/index/generated/ja.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

視覚的なプログラミング環境ブロックリー生成された JavaScript コードを表示します。ブロックの状態を保存してリンクを取得します。ブロックで作成したプログラムを実行します。プログラムを実行リセットOKキャンセル論理繰り返し数学テキストリスト変数関数ネットワーク接続のエラーです。ブロックの状態をこのリンクで共有できます:\n\n%1すみません。「%1」という名前のプログラムは保存されていません。保存されたファイルを読み込めませんでした。別のバージョンのブロックリーで作成された可能性があります。リストテキスト
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
ブロックリーのアプリブロックリーはフリーでありオープンソースです。ブロックリーのコードや翻訳に貢献、またはブロックリーを自分のアプリに使用するには、%1 を参照してください。
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

ブロックリーのアプリ

ブロックリーはグラフィカルなプログラミング環境です。以下に列挙したサンプル アプリケーションはブロックリーを使用しています。
コード
ブロックリーのプログラムを JavaScript、Python、Dart、XML にエクスポートしましょう。
飛行機座席計算機
1変数または2変数の数学の問題を解きましょう。

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ko.js b/apps/index/generated/ko.js deleted file mode 100644 index 789519257..000000000 --- a/apps/index/generated/ko.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

시각 프로그래밍 환경블록리생성된 자바스크립트 코드를 봅니다.블록을 저장하고 링크를 가져옵니다.작업 공간에서 블록으로 정의된 프로그램을 실행합니다.프로그램 실행초기화확인취소논리반복수학텍스트목록변수기능요청에 문제가 있습니다.다음 링크로 블록을 공유하세요:\n\n%1죄송하지만 \'%1\'은 어떤 저장된 프로그램으로 일치하지 않습니다.저장된 파일을 불러올 수 없습니다. 혹시 블록리의 다른 버전으로 만들었습니까?목록텍스트
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
블록리 앱Blockly는 공짜이며 오픈소스입니다. Blockly의 코드 또는 번역에 기여하거나 당신의 프로그램에서 Blockly를 이용하려면, %1 을 방문하세요.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

블록리 앱

Blockly는 그래픽 프로그래밍 환경을 제공합니다. 아래는 Blockly를 사용하는 몇가지 예시 프로그램들입니다.
코드
블록리 프로그램을 자바스크립트, 파이썬, 다트 또는 XML로 내보냅니다.
비행기 좌석 계산기
하나 또는 두개의 변수를 가진 수학 문제를 풉니다.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/lb.js b/apps/index/generated/lb.js deleted file mode 100644 index 405fb41d1..000000000 --- a/apps/index/generated/lb.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklyGeneréierte JavaScript Code kucken.Späicheren a mat de Bléck verlinkenRun the program defined by the blocks in the workspace.Programm ausféierenZrécksetzenOKOfbriechenLogikLoopsMathTextLëschtenFaarfVariabelenFunktiounenEt gouf e Problem mat der Ufro.Share your blocks with this link:\\n\\n%1Pardon, \'%1\' entsprécht kengem vun de gespäicherte Programmer.Äre gespäicherte Fichier konnt net geluede ginn. Vläicht hutt Dir e mat enger anerer Versioun vu Blockly gemaach?LëschtText
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Code
Export a Blockly program into JavaScript, Python, Dart or XML.
Rechemaschinne fir d\'Sëtzer am Fliger
E mathematesche Problem mat enger oder zwou Variabele léisen.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/lrc.js b/apps/index/generated/lrc.js deleted file mode 100644 index 781b95726..000000000 --- a/apps/index/generated/lrc.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

یه راساگه برنامه نیسی قاول دیئنقلف بیهسیل کد جاوا اسکریپت راس بیه بکیدبخشیانه ذخیره و هوم پیوند بکیدRun the program defined by the blocks in the workspace.برنامه نه اجرا بکیتد نو شرو كردنخوئهرد كردنعلقمنیحلقه یاحساو کتاومتننوم گه یارنآلشت ونارویه یایه گل مشگل وا درحاست هئبخشیاتونه وا ای هوم پیوند بهر بکیدSorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?نوم گهمتن
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
کد
Export a Blockly program into JavaScript, Python, Dart or XML.
زمی
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/lt.js b/apps/index/generated/lt.js deleted file mode 100644 index af0984eec..000000000 --- a/apps/index/generated/lt.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

vizualus programavimasBlocklyPeržiūrėti atitinkantį JavaScript kodą.Išsaugoti (sugeneruoti URL nuorodą).Vykdyti programą.Paleisti ProgramąAtnaujintiGeraiAtšauktiLogikaKartojimasMatematikaTekstasSąrašaiSpalvaKintamiejiFunkcijosIškilo problema su prašymu.%1Deja, \'%1\' neatitinka jokios išsaugotos programos.Nesuprantu pateikto failo. Gal jis buvo sukurtas su kita Blocky versija?sąrašastekstas
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blocky programėlėsBlocky yra atviro kodo sistema. Norintys prisidėti ar naudoti, žr. %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blocky programėlės

Blocky yra vizuali programavimo aplinka. Žemiau yra keli pritaikymo pavyzdžiai.
Kodas
Eksportuokite Blocky programą į JavaScript, Python, Dart arba XML.
Lėktuvo sėdimų vietų skaičiuoklė
Išspręskite lygtį - užrašykite atsakymo formulę pagal turimus duomenis.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/lv.js b/apps/index/generated/lv.js deleted file mode 100644 index 567d55cc4..000000000 --- a/apps/index/generated/lv.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

vizuāla programmēšanas videBlocklyApskatīt ģenerēto JavaScript pirmkodu.Saglabāt un piesaistīt blokiem.Palaidiet programmu, ko definē bloki darbvietā.Izpildīt programmuSākt no sākumaLabiAtceltLoģikaCikliMatemātikaTekstsSarakstiKrāsaMainīgieProcedūrasPieprasījuma kļūda.Dalies ar saviem blokiem ar šo saiti:\n\n%1Atvainojiet, bet \'%1\' neatbilst nevienai no saglabātajām programmām.Nevaru ielādēt tavu saglabāto failu. Iespējams, tas tika izveidots ar citu Blockly versiju?sarakststeksts
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Pirmkods
Export a Blockly program into JavaScript, Python, Dart or XML.
Lidmašīna
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/mg.js b/apps/index/generated/mg.js deleted file mode 100644 index 9be145c1c..000000000 --- a/apps/index/generated/mg.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Tontolo fanoratam-pandaharana ara-pijeryBlocklyHijery ny kaody JavaScript namboarina.Hitahiry ary hampirohy amin\'ny bolongana.Handefa ny fandaharana voafaritry ny bolongana ao amin\'ny erana iasana.Handefa ny fandaharanaAverinaOKAoka ihanyLôjikaTondro mifolakaMatematikaSoratraLisitraLokoOvaPaikaNisy olana tamin\'ilay hataka.Zarao amin\'ity rohy ity ny bolonganao: \n\n%1Miala tsiny, tsy miady amin\'ny fandaharana notehirizina \'%1\'.Tsy nahasokatra ny rakitra voatahirinao. Mety namboarina tamin\'ny versionan\'i Blockly hafa angamba ilay izy?lisitrasoratra
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Fandaharana BlocklyMalalaka ary open-souce i Blockly. Vangio %1 raha tia handray anjara amin\'ny renifango na amin\'ny dikan-teny.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Fandaharana Blockly

Tontolo fanoratana fandaharana ara-tsary i Blockly. Eo ambany ireo santiônam-pandaharana mampiasa an\'i Blockly.
Kaody
Hamoaka ny fandaharana Blockly amin\'ny JavaScript, Python na XML.
Mpikajy sezam-piaramanidina
Hamaha olana matematika mampiasa ova iray na roa.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/mk.js b/apps/index/generated/mk.js deleted file mode 100644 index 062204c25..000000000 --- a/apps/index/generated/mk.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

визуелна околина за програмирањеБлоклиПогл. создадениот JavaScript-код.Зачувај и стави врска до блокчињата.Пушти го програмот определен од блокчињата во работниот простор.Пушти го програмотОдновоОКОткажиЛогикаЈамкиМатематикаТекстСписоциБојаПроменливиФункцииСе појави проблем во барањето.Споделете ги вашите блокчиња со оваа врска:\n\n%1„%1“ не одговара на ниеден зачуван програм.Не можев да ја вчитам зачуваната податотека. Да не сте ја создале со друга верзија на Blockly?списоктекст
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Код
Export a Blockly program into JavaScript, Python, Dart or XML.
Авион
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/mr.js b/apps/index/generated/mr.js deleted file mode 100644 index 1c52aa08b..000000000 --- a/apps/index/generated/mr.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.प्रोग्राम चालवा(दौडवा)पुनर्स्थापित कराOKCancelLogicवेटोळ्या(लूप्स)MathमजकूरListsरंगअस्थिरकेFunctionsThere was a problem with the request.Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?यादीमजकूर
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
संकेत
Export a Blockly program into JavaScript, Python, Dart or XML.
विमान
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ms.js b/apps/index/generated/ms.js deleted file mode 100644 index 1aa9f1a49..000000000 --- a/apps/index/generated/ms.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

persekitaran pengaturcaraan visualBlocklyLihat kod JavaScript yang dihasilkan.Simpan dan pautkan kepada blok.Jalankan aturcara yang ditetapkan oleh blok-blok di dalam ruang kerja.Jalankan ProgramResetOKBatalkanLogikGelungMatematikTeksSenaraiWarnaPemboleh ubahFungsiPermintaan itu terdapat masalah.Kongsikan blok-blok anda dengan pautan ini:\n\n%1Maaf, \'%1\' tidak berpadanan dengan sebarang aturcara yang disimpan.Fail simpanan anda tidak dapat dimuatkan. Jangan-jangan ia dicipta dengan versi Blockly yang berlainan?senaraiteks
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplikasi BlocklyBlockly adalah bebas dan bersumber terbuka. Bagi menyumbang kod atau terjemahan kepada Blockly, atau menggunakan Blockly dalam aplikasi anda, lawati %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplikasi Blockly

Blockly ialah sebuah persekitaran pengaturcaraan grafik. Di bawah ialah beberapa contoh aplikasi yang menggunakan Blockly.
Kod
Eksport suatu atur cara Blockly ke dalam JavaScript, Python, Dart atau XML.
Pengira Tempat Duduk Kapal Terbang
Selesaikan masalah matematik dengan satu dua pemboleh ubah.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/nb.js b/apps/index/generated/nb.js deleted file mode 100644 index e9e3fdb30..000000000 --- a/apps/index/generated/nb.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Et visuelt programmeringsmiljøBlocklySe generert JavaScriptkodeLagre og lenke til blokker.Kjør programmet definert av blokken i arbeidsområdet.Kjør ProgrammetNullstillOKAvbrytLogikkLooperMatteTekstListerFargeVariablerFunksjonerDet oppsto et problem med forespørselen dinDel dine blokker med denne lenken:\n\n%1Beklager, \'%1\' samsvarer ikke med noe lagret program.Kunne ikke laste inn filen. Kanskje den ble laget med en annen versjon av Blockly?ListeTekst
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
BlocklyprogramBlockly er gratis og har en åpen kildekode. FOr å bidra med kode eller oversettelser til Blockly, eller for å bruke Blockly i din egen app, se %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blocklyprogram

Blockly er et grafisk programmeringsmiljø. Under er noen eksempelprogram som bruker Blockly.
Kode
Eksporter et Blockly-program til JavaScript, Python, Dart eller XML.
Flysetekalkulator
Løs et matematisk problem med én eller to variabler.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ne.js b/apps/index/generated/ne.js deleted file mode 100644 index beb0ac713..000000000 --- a/apps/index/generated/ne.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

एक भिज्युअल प्रोग्रामिङ्ग वातावरणBlockly(ब्लकली)See generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.अनुप्रयोग चलाउनेरिसेट गर्नुहोस्हुन्छरद्द गर्नेलजिकलुपहरूगणितपाठसूचीरंगचल राशी(variables)अनुक्रियाहरुThere was a problem with the request.Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?सूचीपाठ
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
कोड
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/nl.js b/apps/index/generated/nl.js deleted file mode 100644 index d8ed393e5..000000000 --- a/apps/index/generated/nl.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

een visuele programmeeromgevingBlocklyBekijk de gemaakte JavaScriptcode.Opslaan en koppelen naar blokken.Voer het programma uit dat met de blokken in de werkruimte is gemaakt.Programma uitvoerenOpnieuw instellenOKAnnulerenLogicaLussenFormulesTekstLijstenKleurVariabelenFunctiesEr is een probleem opgetreden tijdens het verwerken van het verzoek.Deel uw blokken via deze koppeling:\n\n%1"%1" komt helaas niet overeen met een opgeslagen bestand.Uw opgeslagen bestand kan niet geladen worden. Is het misschien gemaakt met een andere versie van Blockly?lijsttekst
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is gratis en open source. Ga naar %1 om code of vertalingen bij te dragen of vertalingen aan Blockly, of Blockly te gebruiken in uw eigen app.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is een grafische programmeeromgeving. Hieronder treft u een aantal voorbeeldtoepassingen aan die gebruikmaken van Blockly.
Code
Een Blocklyprogramma exporteren naar JavaScript, Python, Dart of XML.
Vliegtuigstoelencalculator
Een wiskundige probleem met een of twee variabelen oplossen.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/oc.js b/apps/index/generated/oc.js deleted file mode 100644 index df48409ea..000000000 --- a/apps/index/generated/oc.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un environament de programacion visualBlocklyVeire lo còde JavaScript generat.Salva e liga als blòts.Aviar lo programa definit pels blòts dins l’espaci de trabalh.Executa lo programaReïnicializarD\'acòrdiAnullarLogicBoclasMathTèxteListasColorVariablasFoncionsI a agut un problèma amb la demanda.Partejatz vòstres blòts gràcia a aqueste ligam :\n\n%1O planhèm, \'%1\' correspond pas a un fichièr Blockly salvament.Impossible de cargar lo fichièr de salvament. Benlèu qu\'es estat creat amb una autra version de Blockly ?listatèxte
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicacions BlocklyBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicacions Blockly

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Còde
Export a Blockly program into JavaScript, Python, Dart or XML.
Calculador de sètis d’avion
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/pl.js b/apps/index/generated/pl.js deleted file mode 100644 index 4b5ec3f0c..000000000 --- a/apps/index/generated/pl.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

graficzne środowisko programistyczneBlocklyZobacz wygenerowany kod JavaScript.Zapisz i podlinkuj do blokówUruchom program zdefinowany przez bloki w obszarze roboczymUruchom ProgramZresetujOKAnulujLogikaPętleMatematykaTekstListyKolorZmienneFunkcjeWystąpił problem z żądaniem.Udpostępnij swoje bloki korzystając z poniższego linku : \n\n\n%1Przepraszamy, "%1" nie odpowiada żadnemu zapisanemu programowi.Nie można załadować zapisanego pliku. Być może został utworzony za pomocą innej wersji Blockly?listatekst
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplikacje BlocklyBlockly jest darmowe i rozwijane w ramach open source (wolnego oprogramowania). Jeżeli chcesz pracować nad kodem, tłumaczeniem Blockly, lub użyć go w swojej aplikacji, wejdź na %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplikacje Blockly

Blockly jest graficznym środowiskiem programistycznym. Poniżej znajdziesz przykładowe aplikacje, które wykorzystują Blockly.
Kod
Exportuj program napisany w Blockly do JavaScriptu, Pythona, Darta lub XMLa.
Kalkulator miejsc w samolocie.
Rozwiąż zadanie matematyczne z jedną lub dwiema zmiennymi.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/pms.js b/apps/index/generated/pms.js deleted file mode 100644 index e0954afbb..000000000 --- a/apps/index/generated/pms.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

n\'ambient ëd programassion visualBlocklyVëdde ël còdes JavaScript generà.Argistré e lijé ai blòch.Fé andé ël programa definì dai blòch ant lë spassi ëd travaj.Fé andé ël programaButé torna coma al prinsipiVa binAnuléLògicaLiasseMatemàticaTestListeColorVariàbijFonsionA-i é staje un problema con l\'arcesta.Ch\'a partagia ij sò blòch grassie a sta liura: %1An dëspias, \'%1 a corëspond a gnun programa salvà.A l\'é nen podusse carié so archivi salvà. Miraco a l\'é stàit creà con na version diferenta ëd Blockly?listatest
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicassion BlocklyBlockly a l\'é a gràtis e a sorgiss duverta. Për contribuì al còdes o a le tradussion ëd Blockly, o për dovré Blockly an soa pròpia aplicassion, ch\'a vìsita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicassion Blockly

Blockly a l\'é n\'Ambient ëd programassion gràfica. Sì-sota a-i é dj\'esempi d\'aplicassion ch\'a deuvro Blockly.
Còdes
Esporté un programa Blockly an JavaScript, Python, Dart o XML.
Calcolator ëd sedij d\'avion
Arzòlve un problema ëd matemàtica con un-a o doe variàbij.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ps.js b/apps/index/generated/ps.js deleted file mode 100644 index 8f63abe5b..000000000 --- a/apps/index/generated/ps.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.Run ProgramResetښهناگارلمنطقLoopsMathمتنلړليکونهرنگVariablesFunctionsد دې غوښتنې سره يوه ستونزه رامېنځ ته شوهShare your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?لړليکمتن
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
کوډ
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/pt-br.js b/apps/index/generated/pt-br.js deleted file mode 100644 index 402160165..000000000 --- a/apps/index/generated/pt-br.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

um ambiente de programação visualBlocklyVeja o código JavaScript gerado.Salvar e ligar aos blocos.Execute o programa definido pelos blocos na área de trabalho.Executar o programaReiniciarOKCancelarLógicaLaçosMatemáticaTextoListasCorVariáveisFunçõesHouve um problema com a requisição.Compartilhe seus blocos com este link:\n\n%1Desculpe, \'%1\' não corresponde a um programa salvo.Não foi possível carregar seu arquivo salvo. Talvez ele tenha sido criado com uma versão diferente do Blockly?listatexto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicativos do BlocklyBlockly é gratuito e de código aberto. Para contribuir com código ou traduções para o Blockly, ou para usar o Blockly em seu próprio aplicativo, visite %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicativos do Blockly

Blockly é um ambiente de programação gráfica. A seguir alguns exemplos de aplicações que utilizam Blockly.
Código
Exporte um programa Blockly para JavaScript, Python, Dart ou XML.
Calculadora de Assentos em Avião
Resolva um problema de matemática com uma ou duas variáveis.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/pt.js b/apps/index/generated/pt.js deleted file mode 100644 index e46bb784c..000000000 --- a/apps/index/generated/pt.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

um ambiente de programação visualBlocklyVeja o código JavaScript gerado.Salva conexão com o blockly.Run the program defined by the blocks in the workspace.Executar programaReiniciarOKCancelarLógicaLoopsMatemáticaTextoListasCorVariáveisFunçõesHouve um problema com a solicitação.Compartilhe os seus blocos com este link:\n\n%1Desculpe, \'%1\' não corresponde a um blockly salvo.Não foi possível ler o seu arquivo salvo. Talvez ele tenha sido gerado por uma versão antiga do Blockly?listatexto
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Código
Export a Blockly program into JavaScript, Python, Dart or XML.
Calculador dos Bancos do Avião
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ro.js b/apps/index/generated/ro.js deleted file mode 100644 index 470159d16..000000000 --- a/apps/index/generated/ro.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un mediu de programare vizualBlocklyVizualizează codul JavaScript generat.Salvează și adaugă la blocuri.Execută programul definit de către blocuri în spațiul de lucru.Rulează programulReseteazăOKRevocareLogicBucleMatematicăTextListeCuloareVariabileFuncțiiA apărut o problemă la solicitare.Distribuie-ți blocurile folosind această legătură:\n\n%1Scuze, „%1” nu corespunde nici unui program salvat.Sistemul nu a putut încărca fișierul salvat. Poate că a fost creat cu o altă versiune de Blockly?listătext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Aplicații BlocklyBlockly este gratuit și open source. Pentru a contribui cu linii de cod sau traduceri la Blockly, sau pentru a folosi Blockly în propriile aplicații, vizitează %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Aplicații Blockly

Blockly este un mediu de programare vizual. Mai jos sunt listate câteva aplicații care folosesc Blockly.
Cod
Exportă un program Blockly în JavaScript, Python, Dart sau XML.
Calculator pentru locurile dintr-un avion
Rezolvă o problemă de matematică cu una sau două variabile.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/ru.js b/apps/index/generated/ru.js deleted file mode 100644 index 4b8649c5d..000000000 --- a/apps/index/generated/ru.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

среда визуального программированияBlockly (Блoкли)Просмотреть созданный код JavaScript.Сохранить и показать ссылку на блоки.Запустить программу, заданную блоками в рабочей области.Запустить ПрограммуСброситьOKОтменаЛогическиеЦиклыМатематикаТекстСпискиЦветПеременныеФункцииПроизошла проблема при запросе.Поделитесь своими блоками по этой ссылке:\n\n%1К сожалению, «%1» не соответствует ни одному сохраненному файлу Блокли.Не удалось загрузить ваш сохраненный файл. Возможно, он был создан в другой версии Блокли?списоктекст
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Приложения Blockly (Блокли)Блокли - бесплатное и открытое программное обеспечение. Чтобы поделиться своим кодом или переводами Блокли, чтобы использовать Блокли для своих приложений, - посетите %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Приложения Blockly (Блокли)

Блокли это графическая среда программирования. Ниже приведены примеры приложений, использующих Блокли.
Код
Переведите программу Блокли на JavaScript, Python, Dart или XML.
Калькулятор посадочных мест в самолёте
Решите математическую задачу с одной или двумя переменными.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sc.js b/apps/index/generated/sc.js deleted file mode 100644 index c3becf8be..000000000 --- a/apps/index/generated/sc.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

un\'ambienti gràficu po programaiBlocklyCàstia su còdixi JavaScript ingenerau.Sarva e alliòngia a is brocus.Arròllia su programa cumpostu de is brocus in s\'àrea de traballu.Arròllia su ProgramaResetOKAnuddaLògicaLòrigasMatemàticaTestuListaColoriVariabilisFuntzionisDdui fut unu problema cun sa preguntaPoni is brocus tuus in custu acàpiu:\n\n%1Mi dispraxit, \'%1\' non torrat a pari cun nimancu unu de is programas sarvaus.Non potzu carrigai su file sarvau. Fortzis est stètiu fatu cun d-una versioni diferenti de Blockly?listatestu
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly est free e open source. Po agiudai in sa codifica o in sa furriadura de Blockly, o po imperai Blockly in sa app cosa tua, bisita %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly est un\'ambienti gràficu po programai. Asuta agatas pariga de programas cuncordaus cun Blockly.
Còdixi
Esporta unu programa Blockly in JavaScript, Python, Dart o XML.
Fai su contu de is cadironis de unu aparèchiu
Arresòlvi unu problema de matemàtica cun d-una o duas variàbilis.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sco.js b/apps/index/generated/sco.js deleted file mode 100644 index c0e8e98ce..000000000 --- a/apps/index/generated/sco.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

ae veesual programin environmentBlockly (Blocklie)See generated JavaScript code.Hain n airt til blocks.Rin the program defined bi the blocks in the wairkspace.Rin ProgramResetOKCancelLogeecLuipsMathsTexLeetsColourVariablesFunctionsThaur wis ae problem wi the request.Shair yer blocks wi this airtin:\n\n%1Sairrie, \'%1\' disna correspond wi onie hained program.Coudnae laid yer hained file. Perhaps it wis makit wi ae deefferent version o Blockly?leettex
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free n apen soorce. Tae contreebute code or owersets til Blockly, or tae uise Blockly in yer ain app, veesit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is ae grapheecal programin environment. Ablo is some sample appleecations that uise Blockly.
Code
Export ae Blockly program intae JavaScript, Python, Dart or XML.
Airplane Seat Calculater
Solve ae maths problem wi yin or twa vareeables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/si.js b/apps/index/generated/si.js deleted file mode 100644 index dc8d56528..000000000 --- a/apps/index/generated/si.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

a visual programming environmentBlocklySee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.මෘදුකාංගය ක්\u200Dරියාත්මක කරන්නනැවත සකසන්නහරිඅවලංගු කරන්නතර්කයLoopsගණිතපෙළලැයිස්තුවර්ණයවිචල්\u200Dයයන්ශ්\u200Dරිතඉල්ලීමෙහි දෝෂයක් තිබුනි.Share your blocks with this link:\\n\\n%1Sorry, \'%1\' doesn\'t correspond with any saved program.Could not load your saved file. Perhaps it was created with a different version of Blockly?ලැයිස්තුවපෙළ
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Code
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
විචල්\u200Dයයන් එකක් හෝ දෙකක් සමඟ ගණිත ගැටලුවක් විසඳන්න.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sk.js b/apps/index/generated/sk.js deleted file mode 100644 index 0224e9103..000000000 --- a/apps/index/generated/sk.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

vizuálne programovacie prostredieBlocklyPrezrieť vygenerovaný javascriptový kód.Uložiť a zdieľať odkaz na tento program.Spustiť program, zložený z dielcov na pracovnej ploche.Spustiť programOdznovaOKZrušiťLogikaCyklyMatematickéTextZoznamyFarbyPremennéFunkcieProblém so spracovaním požiadavky.Zdieľať tento program skopírovaním odkazu\n\n%1Prepáč, \'%1\' nie je meno žiadnemu uloženému programu.Nebolo možné načítať uložený súbor. Možno bol vytvorený v inej verzii Blocky.zoznamtext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Kód
Export a Blockly program into JavaScript, Python, Dart or XML.
Lietadlo
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sr.js b/apps/index/generated/sr.js deleted file mode 100644 index e8218f92f..000000000 --- a/apps/index/generated/sr.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

визуелно окружење за програмирањеBlocklyПогледајте генерисани JavaScript кôд.Сачувајте и повежите са блоковима.Покрените програм заснован на блоковима у радном простору.Покрени програмПоново поставиУ редуОткажиЛогикаПетљеМатематикаТекстСписковиБојаПроменљивеПроцедуреДошло је до проблема у захтеву.Делите своје блокове овом везом:\n\n%1„%1“ не одговара ниједном сачуваном програму.Не могу да учитам сачувану датотеку. Можда је направљена другом верзијом Blockly-ја.списактекст
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Апликације Blockly-јаBlockly је слободан програм отвореног кода. Да бисте допринели његовом коду или преводу или користили га у својој апликацији, посетите %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Апликације Blockly-ја

Blockly је графичко окружење за програмирање. Испод су као пример дате неке апликације које користе Blockly.
Кôд
Извезите програм Blockly-ја у JavaScript, Python, Dart или XML.
Калкулатор места у авиону
Решите математички проблем помоћу једне или две променљиве.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sv.js b/apps/index/generated/sv.js deleted file mode 100644 index 5afc24049..000000000 --- a/apps/index/generated/sv.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

en visuell programmeringsmiljöBlocklySe genererad JavaScript-kod.Spara och länka till block.Kör programmet som definierats av blocken i arbetsytan.Kör programÅterställOKAvbrytLogikLooparMatematikTextListorFärgVariablerFunktionerDet uppstod ett problem med begäran.Dela dina block med denna länk: \n\n%1Tyvärr, \'%1\' överensstämmer inte med något sparat program.Kunde inte läsa din sparade fil. Den skapades kanske med en annan version av Blockly?listatext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
BlocklyprogramBlockly är gratis och har en öppen källkod. För att bidra till Blockly med kod eller översättningar, eller för att använda Blockly i din egen app, besök %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blocklyprogram

Blockly är en grafisk programmeringsmiljö. Nedan finns några exempelprogram som använder Blockly.
Kod
Exportera ett Blockly-program till JavaScript, Python, Dart eller XML.
Plansäteskalkylator
Lös ett matematiskt problem med en eller två variabler.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/sw.js b/apps/index/generated/sw.js deleted file mode 100644 index b08cde07f..000000000 --- a/apps/index/generated/sw.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

mazingira ya programu ya kuonaBlocklyTazama mwandiko wa JavaScript inayotokana.Hifadhi na kiungo cha vishiku.Run the program defined by the blocks in the workspace.Endesha ProgramuSeti upyaSawaCancelLogicLoopsMathTextListsColourVariablesFunctionsKuna shida na amri.Sambaza vishiku vyako na kiungo hiki: \n\n%1Samahani, \'%1\' haiendani na faili yoyote ya Blockly.Upakiaji wa faili yako iliyohifadhiwa haiwezekani. Labda iliundwa na toleo tofauti ya Blockly?listtext
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
Code
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/th.js b/apps/index/generated/th.js deleted file mode 100644 index c0819813f..000000000 --- a/apps/index/generated/th.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

ระบบการเขียนโปรแกรมด้วยรูปภาพBlocklyดูโค้ด JavaScript ที่ถูกสร้างขึ้นบันทึกและสร้างลิงก์มายังบล็อกเหล่านี้เรียกใช้โปรแกรมตามที่กำหนดไว้ด้วยบล็อกที่อยู่ในพื้นที่ทำงานเรียกใช้โปรแกรมเริ่มใหม่ตกลงยกเลิกตรรกะการวนซ้ำคณิตศาสตร์ข้อความรายการสีตัวแปรฟังก์ชันมีปัญหาเกี่ยวกับการร้องขอแบ่งปันบล็อกของคุณด้วยลิงก์นี้:\n\n%1เสียใจด้วย \'%1\' ไม่ตรงกับโปรแกรมใดๆ ที่เคยบันทึกเอาไว้เลยไม่สามารถโหลดไฟล์ที่บันทึกไว้ของคุณได้ บางทีมันอาจจะถูกสร้างขึ้นด้วย Blockly รุ่นอื่นที่แตกต่างกัน?รายการข้อความ
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
โปรแกรมประยุกต์ BlocklyBlockly นั้นฟรีและเปิดเผยซอร์สโค้ด ถ้าต้องการช่วยเหลือในการพัฒนาโปรแกรม ช่วยแปลภาษา หรือต้องการใช้ Blockly ในโปรแกรมของคุณ สามารถเข้าไปได้ที่ %1
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

โปรแกรมประยุกต์ Blockly

Blockly คือระบบการเขียนโปรแกรมด้วยภาพ ด้านล่างนี้คือตัวอย่างโปรแกรมประยุกต์ที่ใช้ Blockly
เขียนโปรแกรม
เขียนโปรแกรมทั่วไป และสามารถแปลง Blockly ให้เป็นภาษา JavaScript, Python, Dart และ XML ได้
ระบบคำนวณที่นั่งบนเครื่องบิน
แก้ปัญหาทางคณิตศาสตร์ด้วยการสร้างสูตรคำนวณที่มีหนึ่งหรือสองตัวแปร

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/tlh.js b/apps/index/generated/tlh.js deleted file mode 100644 index d96aec5ba..000000000 --- a/apps/index/generated/tlh.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

ngoq DaleghlaHbogh, ngogh DaghunlaHboghghunmeH ngoghSee generated JavaScript code.Save and link to blocks.Run the program defined by the blocks in the workspace.Run ProgramResetruchqIlmeqvIHtaHbogh ghomeymI\'QeDghItlhHommeytetlhmeyrItlhlIwmeymIwmeyQapbe\' tlhobmeH QIn.latlhvaD ngoghmeylIj DangeHmeH Quvvam yIlo\':\n\n%1Do\'Ha\', ngogh nab pollu\'pu\'bogh \'oHbe\'law\' "%1"\'e\'.ngogh nablIj pollu\'pu\'bogh chu\'qa\'laHbe\' vay\'. chaq pollu\'pu\'DI\' ghunmeH ngogh pIm lo\'lu\'pu\'.tetlhghItlhHom
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly AppsBlockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly Apps

Blockly is a graphical programming environment. Below are some sample applications that use Blockly.
ngoq
Export a Blockly program into JavaScript, Python, Dart or XML.
Plane Seat Calculator
Solve a math problem with one or two variables.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/tr.js b/apps/index/generated/tr.js deleted file mode 100644 index 5ed15c74d..000000000 --- a/apps/index/generated/tr.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

görsel bir programlama ortamıBlocklyOluşturulan JavaScript kodunu görüntüle.Blokları ve bağlantı adresini kaydet.Çalışma alanında bloklar tarafından tanımlanan programını çalıştırın.Programı ÇalıştırTekrarTAMAMİptalMantıkDöngülerMatematikMetinListelerRenkDeğişkenlerİşlevlerİstek ile ilgili bir problem var.Bloklarını bu bağlantı ile paylaş:\n\n%1Üzgünüz, \'%1\' hiç bir kaydedilmiş program ile uyuşmuyor.Kaydedilen dosyanız yüklenemiyor\nBlockly\'nin önceki sürümü ile kaydedilmiş olabilir mi?listemetin
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly uygulamalarıBlockly ücretsiz ve açık kaynaklıdır. Koda veya Blockly çevirilerine katkıda bulunmak, ya da kendi uygulamanızda Blockly\'yi kullanmak için %1 sayfasını ziyaret edin.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly uygulamaları

Blockly grafiksel bir programlama ortamıdır. Blockly kullanan bazı örnek uygulamalar aşağıdadır.
Kod
Bir Blockly programını JavaScript, Python, Dart ya da XML\'e aktarın.
Uçak Koltuğu Hesaplayıcı
Bir veya iki değişkenle bir matematik problemini çöz.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/uk.js b/apps/index/generated/uk.js deleted file mode 100644 index b0306862a..000000000 --- a/apps/index/generated/uk.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

візуальне середовище програмуванняBlockly (Блоклі)Див. згенерований код JavaScript.Зберегти і пов\'язати з блоками.Запустіть програму, визначену блоками у робочій області.Запустити програмуОчиститиOKСкасуватиЛогікаПетліМатематикаТекстСпискиКолірЗмінніФункціїВиникла проблема із запитом.Поділитися вашим блоками через посилання:\n\n%1На жаль, "%1" не відповідає жодній збереженій програмі.Не вдалося завантажити ваш збережений файл. Можливо, він був створений з іншої версії Blockly?списоктекст
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Програми BlocklyБлоклі - безкоштовне і відкрите програмне забезпечення. Щоб поділитися своїм кодом або перекладами Блоклі, щоб використовувати Блоклі для своїх додатків, завітайте %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Програми Blockly

Блоклі - це графічне середовище програмування. Нижче наведені приклади додатків, що використовують Блоклі.
Код
Експортувати Blockly програму на JavaScript, Python, Dart або XML.
Калькулятор місць у літаку
Розв\'язуйте математичну задачу з однією або двома змінними.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/vi.js b/apps/index/generated/vi.js deleted file mode 100644 index e745f8ea9..000000000 --- a/apps/index/generated/vi.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

môi trường lập trình trực quanBlocklyXem code đã tạo bằng JavaScript.Lưu và lấy địa chỉ liên kết.Chạy chương trình.Chạy chương trìnhLàm lạiOKHủyLogicVòng lặpCông thức toánVăn bảnDanh sáchMàuBiếnHàmHoạt động bị trục trặc, không thực hiện được yêu cầu của bạn.Chia sẻ chương trình của bạn với liên kết sau:\n\n %1Không tìm thấy chương trình được lưu ở \'%1\'.Không mở được chương trình của bạn. Có thể nó nằm trong một phiên bản khác của Blockly?danh sáchvăn bản
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Ứng dụng BlocklyBlockly là mã nguồn mở và miễn phí. Đóng góp mã hoặc bản dịch để Blockly, hoặc sử dụng Blockly trong ứng dụng của riêng bạn, truy cập vào %1.
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Ứng dụng Blockly

Blockly là một môi trường lập trình đồ họa. Dưới đây là một số ứng dụng mẫu sử dụng Blockly.
Chương trình
Xuất khẩu một chương trình Blockly vào JavaScript, Python, Dart hoặc XML.
Máy bay ghế máy tính
Giải quyết một vấn đề toán học với một hoặc hai biến.

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/zh-hans.js b/apps/index/generated/zh-hans.js deleted file mode 100644 index 28df6b12c..000000000 --- a/apps/index/generated/zh-hans.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

一个可视化编程环境Blockly查看生成的JavaScript代码。保存模块并生成链接。于工作区中运行块所定义的程式。运行程序重置确认取消逻辑循环数学文本列表颜色变量函数请求存在问题。通过这个链接分享您的模块:\n\n%1对不起,没有任何已保存的程序对应\'%1\' 。无法载入您保存的文件。您是否使用其他版本的Blockly创建该文件的?列表文本
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly应用程序Blockly是免费和开源的软件。若要贡献代码或翻译Blockly,或者在您自己的应用中使用Blockly,请查看%1。
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly应用程序

Blockly是一个图形化的程序设计环境。下面是一些使用Blockly的应用示例。
代码
将Blockly程序导出为JavaScript、Python、Dart或XML。
飞机座位计算器
解决与一个或两个变量的数学问题。

developers.google.com/blockly'; -}; diff --git a/apps/index/generated/zh-hant.js b/apps/index/generated/zh-hant.js deleted file mode 100644 index a85eb5463..000000000 --- a/apps/index/generated/zh-hant.js +++ /dev/null @@ -1,45 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

視覺化程式設計環境Blockly查看產生的JavaScript程式碼。儲存積木組並提供連結。於工作區中執行積木組所定義的程式。執行程式重設確定取消邏輯迴圈數學式文字列表顏色變量流程命令出現錯誤。透過此連結分享您的積木組:\n\n%1對不起,「%1」並未對應任何已保存的程式。未能載入您保存的檔案。或許它是由其他版本的Blockly創建?列表文字
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof appsIndex == 'undefined') { var appsIndex = {}; } - - -appsIndex.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Blockly 應用程式Blockly 是自由和開放源始碼的軟體。若要貢獻代碼或翻譯到 Blockly,或在您自己的應用程式中使用 Blockly,請查看 %1。
'; -}; - - -appsIndex.start = function(opt_data, opt_ignored, opt_ijData) { - return appsIndex.messages(null, null, opt_ijData) + '

Blockly 應用程式

Blockly 是一個圖形化的程式設計環境。下面是一些使用 Blockly 的應用範例。
程式碼
將 Blockly 程式匯出成 JavaScript、 Python 或 XML。
飛機座位計算器
解決一個或兩個變數的數學問題。

developers.google.com/blockly'; -}; diff --git a/apps/index/index.js b/apps/index/index.js deleted file mode 100644 index 11e3b0ac0..000000000 --- a/apps/index/index.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Blockly Apps: Index - * - * Copyright 2012 Google Inc. - * https://developers.google.com/blockly/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @fileoverview JavaScript for Blockly's application index. - * @author ellen.spertus@gmail.com (Ellen Spertus) - */ -'use strict'; - -var BlocklyAppsIndex = {}; - -// Supported languages. -BlocklyApps.LANGUAGES = - ['ace', 'ar', 'az', 'be-tarask', 'br', 'ca', 'cs', 'da', 'de', 'el', 'en', - 'es', 'eu', 'fa', 'fr', 'gl', 'he', 'hi', 'hrx', 'hu', 'ia', 'is', 'it', - 'ja', 'ko', 'lv', 'mg', 'mk', 'ms', 'nb', 'nl', 'pl', 'pms', 'pt-br', 'ro', - 'ru', 'sco', 'sk', 'sr', 'sv', 'sw', 'th', 'tr', 'uk', 'vi', 'zh-hans', - 'zh-hant']; -BlocklyApps.LANG = BlocklyApps.getLang(); - -// Relative directory "index/" needed because index.html is in parent directory. -document.write('\n'); - -window.addEventListener('load', BlocklyApps.init); diff --git a/apps/index/template.soy b/apps/index/template.soy deleted file mode 100644 index aed6a9939..000000000 --- a/apps/index/template.soy +++ /dev/null @@ -1,67 +0,0 @@ -{namespace appsIndex} - -/** - * This is a Closure Template. - * - * To regenerate just en.js, run this command: - * java -jar ../_soy/SoyToJsSrcCompiler.jar --outputPathFormat generated/en.js --srcs ../common.soy,template.soy,../code/template.soy,../graph/template.soy,../maze/template.soy,../plane/template.soy,../turtle/template.soy - * - * To regenerate all files, see: trunk/apps/common.soy - */ - -/** - * Translated messages for use on page. - */ -{template .messages} - {call apps.messages /} -

- {msg meaning="Apps.indexTitle" desc="page text - The word 'Apps' is short for 'Applications'. We chose it because it is more informal. This and the following messages currently appear at [http://blockly-demo.appspot.com/static/apps/index.html]."}Blockly Apps{/msg} - {msg meaning="Apps.indexFooter" desc="page text - Text appearing at the end of the page. Parameters:\n* %1 - the Blockly URL"}Blockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.{/msg} -
-{/template} - -/** - * Web page structure. - */ -{template .start} - {call .messages /} - - -
-

{msg meaning="Apps.indexTitle" desc="IBID"}Blockly Apps{/msg}

-
-
- {{msg meaning="Apps.choiceIntro" desc="page text - This appears before a list of Blockly apps. Please use the same term for 'Blockly' as in {lb}{lb}msg-blockly|Apps.blocklyMessage{rb}{rb}."}}Blockly is a graphical programming environment. Below are some sample applications that use Blockly.{{/msg}}
- - - - - - - - - - - -
- - - - -
{msg meaning="Code.title" desc="IBID"}Code{/msg}
-
{msg meaning="Apps.codeSubtitle" desc="page text - A subtitle describing Blockly's [https://blockly-demo.appspot.com/static/apps/code/index.html Code application]."}Export a Blockly program into JavaScript, Python, Dart or XML.{/msg}
-
- - - - -
{msg meaning="Plane.plane" desc="IBID"}Plane Seat Calculator{/msg}
-
{msg meaning="Apps.planeSubtitle" desc="page text - A subtitle describing Blockly's [https://blockly-demo.appspot.com/static/apps/plane/index.html Plane application]."}Solve a math problem with one or two variables.{/msg}
-
- - // The footer messages are set in index.html. -

- developers.google.com/blockly - -{/template} diff --git a/apps/json/ace.json b/apps/json/ace.json index 32bf4023b..e9f9bbd2b 100644 --- a/apps/json/ace.json +++ b/apps/json/ace.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "Ruweuëng meuprogram ban leumah", - "Apps.blocklyMessage": "Teutheun", + "Blockly": "Teutheun", "Apps.codeTooltip": "Eu kode JavaScript yang geupeuhasé", "Apps.linkTooltip": "Keubah ngon neupawôt keu theun", "Apps.runTooltip": "Neupeujak program nyang geupeuteutap le seuneutheun lam ruweuëng keurija", @@ -33,11 +33,5 @@ "Code.discard": "Sampôh mandum %1 seuneutheun", "Code.title": "Kode", "Code.blocks": "Seuneutheun", - "Code.trashTooltip": "Boh mandum seuneutheun", - "Apps.indexTitle": "Aplikasi seuneutheun", - "Apps.indexFooter": "Blockly nakeuh bibeuëh ngon meunè nyang teuhah.\nSoë mantong nyang meuripèe kode atawa teujeumah keu Blockly, atawa geungui Blockly lam aplikasi droëneuh, neukunjông %1.", - "Apps.choiceIntro": "Blockly nakeuh ruweuëng meuprogram grafis. Dimeuyub nyoë nakeuh meupadum boh conto aplikasi nyang geunguy Blockly.", - "Apps.codeSubtitle": "Neu eksport program Blockly u dalam JavaScript, Phyton atawa XMK.", - "Plane.plane": "Peukakah Bileuëng Kurusi Kapai Teureubang.", - "Apps.planeSubtitle": "Neupeuglah masalah matematik ngon saboh atawa dua kri neuubah." + "Code.trashTooltip": "Boh mandum seuneutheun" } diff --git a/apps/json/ar.json b/apps/json/ar.json index 16d8fa45d..70319a061 100644 --- a/apps/json/ar.json +++ b/apps/json/ar.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "بيئة برمجة مرئية", - "Apps.blocklyMessage": "بلوكلي", + "Blockly": "بلوكلي", "Apps.codeTooltip": "راجع إنشاء تعليمات برمجية JavaScript.", "Apps.linkTooltip": "احفظ ووصلة إلى البلوكات.", "Apps.runTooltip": "شغل البرنامج المعرف بواسطة البلوكات في مساحة العمل.", @@ -36,24 +36,5 @@ "Code.discard": "حذف كل بلوكات %1؟", "Code.title": "كود", "Code.blocks": "البلوكات", - "Code.trashTooltip": "تجاهل كل البلوكات.", - "Apps.indexTitle": "تطبيقات بلوكلي", - "Apps.indexFooter": "يعتبر \"بلوكلي\" مصدر مجاني ومفتوح. للمٌساهمة في الكود أو الترجمات الخاصة بـ بلوكلي, او لاستخدام بلوكلي في التطبيق الخاص بك, يرجى زيارة %1", - "Apps.choiceIntro": "يعتبر \"بلوكي\" بيئة برمجية ورسومية في آن واحد. ستجد أدناه بعض النماذج لتطبيقات تستعمل بلوكلي.", - "Apps.codeSubtitle": "صدر برنامج بلوكلي إلى جافاسكريبت، بايثون، دارت أو XML.", - "Plane.plane": "آلة حاسبة لمقعد الطائرة", - "Apps.planeSubtitle": "حل مشكلة رياضيات في متغير واحد أو متغيرين.", - "Plane.rows": "الصفوف: %1", - "Plane.getRows": "الصفوف (%1)", - "Plane.rows1": "صفوف الطبقة الأولى: %1", - "Plane.getRows1": "صفوف الطبقة الأولى (%1)", - "Plane.rows2": "صفوف الفئة الثانية: %1", - "Plane.getRows2": "صفوف الفئة الثانية: (%1)", - "Plane.seats": "المقاعد: %1", - "Plane.placeholder": "؟", - "Plane.setSeats": "المقاعد =", - "Plane.description1": "هنالك طائرة تحتوي على عدد من صفوف مقاعد الركاب. كل صف يحتوي على أربعة مقاعد.", - "Plane.description2": "طائرة بمقعدين في مقطورة الطيّار (للطيار ومساعده) وعدد من الصفوف يحتوي كل صف على أربعة مقاعد.", - "Plane.description3": "طائرة بمقعدين في مقطورة الطيّار (للطيار ومساعده) وعدد من المقاعد في صفوف الدرجة الأولى والثانية. كل صف من صفوف الدرجة الأولى يحتوي على أربعة مقاعد. ويحتوي كل صف في الدرجة الثانية على خمسة مقاعد.", - "Plane.instructions": "لبناء صيغة (أدناه) تقوم بحساب إجمالي عدد المقاعد في الطائرة عند تغيير الصفوف (أعلاه)." + "Code.trashTooltip": "تجاهل كل البلوكات." } diff --git a/apps/json/az.json b/apps/json/az.json index 57b6c87f7..107ead308 100644 --- a/apps/json/az.json +++ b/apps/json/az.json @@ -20,8 +20,5 @@ "Code.badCode": "Proqram xətası:\n%1", "Code.title": "Kod", "Code.blocks": "Bloklar", - "Code.trashTooltip": "Bütün bloklardan imtina et.", - "Apps.choiceIntro": "Blockly-qrafik proqram təminatıdır. Aşağıda Blockly-dən istifadə edən əlavələrin nümunələri göstərilmişdir.", - "Apps.codeSubtitle": "Blockly proqramını JavaScript, Python, Dart və ya XML formatına çevirin.", - "Plane.placeholder": "?" + "Code.trashTooltip": "Bütün bloklardan imtina et." } diff --git a/apps/json/be-tarask.json b/apps/json/be-tarask.json index 2a213dd1b..91a0e00cc 100644 --- a/apps/json/be-tarask.json +++ b/apps/json/be-tarask.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "Асяродзьдзе віртуальнага праграмаваньня", - "Apps.blocklyMessage": "Blockly (Блоклі)", + "Blockly": "Blockly (Блоклі)", "Apps.codeTooltip": "Глядзі згенераваны код JavaScript.", "Apps.linkTooltip": "Захаваць і зьвязаць з блёкамі.", "Apps.runTooltip": "Запусьціце праграму, вызначаную блёкамі ў працоўнай вобласьці.", @@ -35,24 +35,5 @@ "Code.discard": "Выдаліць усе блёкі %1?", "Code.title": "Код", "Code.blocks": "Блёкі", - "Code.trashTooltip": "Выдаліць усе блёкі.", - "Apps.indexTitle": "Дастасаваньні Блоклі", - "Apps.indexFooter": "Блоклі - гэта вольны рэсурс з адкрытым кодам. Каб падзяліцца сваім кодам ці перакладамі Блоклі або выкарыстоўваць Блоклі ва ўласных даставаньнях наведайце %1.", - "Apps.choiceIntro": "Блоклі - гэта графічнае асяродзьдзе праграмаваньня. Ніжэй знаходзяцца некалькі прыкладаў дастасаваньняў якія выкарыстоўваюць Блоклі.", - "Apps.codeSubtitle": "Экспартуйце праграму Блоклі на JavaScript, Python, Dart ці XML.", - "Plane.plane": "Калькулятар месцаў у самалёце", - "Apps.planeSubtitle": "Рашыце матэматычную задачу з адной ці некалькімі пераменнымі.", - "Plane.rows": "Радкоў: %1", - "Plane.getRows": "радкоў (%1)", - "Plane.rows1": "Радкі першага клясу: %1", - "Plane.getRows1": "радкі першага клясу (%1)", - "Plane.rows2": "Радкі другога клясу: %1", - "Plane.getRows2": "радкі другога клясу (%1)", - "Plane.seats": "Месцаў: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "месцаў =", - "Plane.description1": "Самалёт мае некалькі шэрагаў пасажырскіх сядзеньняў. Кожная шэраг утрымлівае чатыры месцы.", - "Plane.description2": "Самалёт мае два месцы ў кабіне экіпажа (пілот і другі пілот), і некалькі шэрагаў пасажырскіх сядзеньняў. Кожны шэраг утрымлівае чатыры месцы.", - "Plane.description3": "Самалёт мае два месцы ў кабіне экіпажа (пілот і другі пілот), і некалькі пасажырскіх шэрагаў месцаў 1-га кляса і 2-га кляса. Кожны шэраг 1-га кляса утрымлівае чатыры месцы. Кожны шэраг 2-га кляса ўтрымлівае пяць месцаў.", - "Plane.instructions": "Пабудаваць формулу (ніжэй), якая падлічвае агульную колькасьць месцаў у самалёце пры зьмене радоў (гл. вышэй)." + "Code.trashTooltip": "Выдаліць усе блёкі." } diff --git a/apps/json/br.json b/apps/json/br.json index 8ff05450f..3a67cb157 100644 --- a/apps/json/br.json +++ b/apps/json/br.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "un endro programmiñ da welet", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Gwelet ar c'hod JavaScript krouet.", "Apps.linkTooltip": "Enrollañ ha liammañ d'ar bloc'hadoù.", "Apps.runTooltip": "Lañsañ ar programm termenet gant ar bloc'hadoù en takad labour.", @@ -36,24 +36,5 @@ "Code.discard": "Diverkañ an holl vloc'hoù %1 ?", "Code.title": "Kod", "Code.blocks": "Bloc'hoù", - "Code.trashTooltip": "Disteurel an holl vloc'hoù.", - "Apps.indexTitle": "Arloadoù Blockly", - "Apps.indexFooter": "Frank ha gant kod tarzh digor eo Blockly. Evit degas ho lod er c'hod hag e troidigezhioù Blockly, pe evit implijout Blockly en hoc'h arload, kit war %1.", - "Apps.choiceIntro": "Un endro programmiñ grafek. Kavout a reot amañ dindan un nebeud skouerioù eus arloadoù a implij Blockly.", - "Apps.codeSubtitle": "Ezporzhiañ ur programm Blockly e JavaScript, Python, Dart pe XML.", - "Plane.plane": "Jederez azezenn nijerez", - "Apps.planeSubtitle": "Diskoulmañ ur skoulmad matematikoù gant un argemmenn pe ziv.", - "Plane.rows": "Renkennadoù : %1", - "Plane.getRows": "renkennadoù (%1)", - "Plane.rows1": "Renkennadoù kentañ klas : %1", - "Plane.getRows1": "Renkennadoù kentañ klas (%1)", - "Plane.rows2": "Renkennadoù eil klas : %1", - "Plane.getRows2": "Renkennadoù eil klas (%1)", - "Plane.seats": "Azezennoù : %1", - "Plane.placeholder": "?", - "Plane.setSeats": "azezennoù =", - "Plane.description1": "Un nijerez he deus un toullad renkennadoù azezennoù evit ar veajourien. Peder azezenn a zo e pep renkennad.", - "Plane.description2": "En un nijerez ez eus div azezenn el logell leviañ(evit al loman hag an eil loman), hag ur toullad renkennadoù azezennoù evit an dremenidi. Peder azezenn zo e pep renkennad.", - "Plane.description3": "En un nijerez ez eus div azezenn el logell leviañ(evit al loman hag an eil loman), hag un toullad renkennadoù azezennoù tremenidi kentañ hag eil klas. Peder azezenn zo e pep renkennad kentañ klas. Pemp azezenn zo e pemp renkennad eil klas.", - "Plane.instructions": "Sevel ur formulenn (amañ dindan) evit jediñ an niver a azezennoù en holl en nijerez pa vez kemmet an niver a renkennadoù (amañ a-us)." + "Code.trashTooltip": "Disteurel an holl vloc'hoù." } diff --git a/apps/json/ca.json b/apps/json/ca.json index fa04e2a53..dd370240e 100644 --- a/apps/json/ca.json +++ b/apps/json/ca.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "un entorn visual de programació", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Vegeu el codi JavaScript generat.", "Apps.linkTooltip": "Desa i enllaça als blocs.", "Apps.runTooltip": "Executa el programa definit pels blocs de l'àrea de treball.", @@ -34,24 +34,5 @@ "Code.discard": "Esborrar els %1 blocs?", "Code.title": "Codi", "Code.blocks": "Blocs", - "Code.trashTooltip": "Descarta tots els blocs.", - "Apps.indexTitle": "Aplicacions Blockly", - "Apps.indexFooter": "Blockly és gratis i de codi font lliure. Per contribuir amb codi o amb traduccions a Blockly, o per usar Blockly en la vostra app, visiteu %1.", - "Apps.choiceIntro": "Blockly és un entorn de programació gràfic. A continuació trobareu algunes aplicacions que usen Blockly.", - "Apps.codeSubtitle": "Exporteu un programa Blockly a JavaScript, Python, Dart o XML.", - "Plane.plane": "Calculadora de seients d'avió", - "Apps.planeSubtitle": "Resoldre un problema matemàtic amb una o dues variables.", - "Plane.rows": "Files: %1", - "Plane.getRows": "files (%1)", - "Plane.rows1": "files de primera classe: %1", - "Plane.getRows1": "files de primera classe (%1)", - "Plane.rows2": "files de segona classe: %1", - "Plane.getRows2": "files de segona classe (%1)", - "Plane.seats": "Seients: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "seients =", - "Plane.description1": "Un avió té un nombre de files de seients de passatgers. Cada fila conté quatre seients.", - "Plane.description2": "Un avió té dos seients en la cabina de vol (pel pilot i pel copilot) i un nombre de files de seients de passatgers. Cada fila conté quatre seients.", - "Plane.description3": "Un avió té dos seients en la cabina de vol (pel pilot i copilot) i un nombre de files per seients de passatgers de primera classe i de segona classe. Cada fila de primera classe conté quatre seients. Cada fila de segona classe conté cinc seients.", - "Plane.instructions": "Construïu una fórmula (a sota) que calculi el nombre total de seients de l'avió a mida que canviïn les files (a dalt)." + "Code.trashTooltip": "Descarta tots els blocs." } diff --git a/apps/json/cs.json b/apps/json/cs.json index 0566afe12..a50036da0 100644 --- a/apps/json/cs.json +++ b/apps/json/cs.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "grafické programovací prostředí", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Zobrazit generovaný JavaScriptový kód.", "Apps.linkTooltip": "Ulož a spoj bloky..", "Apps.runProgram": "Spusť program", @@ -32,20 +32,5 @@ "Code.discard": "Odstranit všechny bloky %1?", "Code.title": "Kód", "Code.blocks": "Bloky", - "Code.trashTooltip": "Zahodit všechny bloky.", - "Apps.indexTitle": "Aplikace Blockly", - "Apps.choiceIntro": "Blockly je grafické programovací prostředí. Níže jsou uvedeny některé ukázkové aplikace, které používají Blockly.", - "Apps.codeSubtitle": "Exportujte Blockly program do JavaScriptu, Pythonu, Dartu nebo XML.", - "Plane.plane": "Kalkulačka míst v sedadle", - "Apps.planeSubtitle": "Vyřešte matematický problém s jednou nebo dvěma proměnnými.", - "Plane.rows": "Řádků: %1", - "Plane.getRows": "řádky (% 1)", - "Plane.rows1": "1. třída řádků: %1", - "Plane.getRows1": "1. třída řádků (%1)", - "Plane.rows2": "2. třída řádků: %1", - "Plane.getRows2": "2. třída řádků (%1)", - "Plane.seats": "Sedadla: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sedadla =", - "Plane.description1": "Letadlo má určitý počet řad sedadel pro cestující. Každá řada obsahuje 4 sedadla." + "Code.trashTooltip": "Zahodit všechny bloky." } diff --git a/apps/json/da.json b/apps/json/da.json index 9ca75e59e..33810a756 100644 --- a/apps/json/da.json +++ b/apps/json/da.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "et visuelt programmeringsmiljø", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Se den genererede JavaScript kode.", "Apps.linkTooltip": "Gem og link til blokke.", "Apps.runTooltip": "Kør programmet, der er defineret af blokkene i arbejdsområdet.", @@ -36,24 +36,5 @@ "Code.discard": "Slet alle %1 blokke?", "Code.title": "Kode", "Code.blocks": "Blokke", - "Code.trashTooltip": "Kassér alle blokke.", - "Apps.indexTitle": "Blockly programmer", - "Apps.indexFooter": "Blockly er gratis og open source. For at bidrage kode eller oversættelser til Blockly eller bruge Blockly i dit eget program, kan du besøge %1.", - "Apps.choiceIntro": "Blockly er et grafisk programmeringsmiljø. Nedenfor er nogle eksempler på programmer der bruger Blockly.", - "Apps.codeSubtitle": "Eksportér et Blockly program til JavaScript, Python, Dart eller XML.", - "Plane.plane": "Flysædelommeregner", - "Apps.planeSubtitle": "Løs et matematisk problem med en eller to variabler.", - "Plane.rows": "Rækker: %1", - "Plane.getRows": "rækker (%1)", - "Plane.rows1": "1. klasse rækker: %1", - "Plane.getRows1": "1. klasse rækker (%1)", - "Plane.rows2": "2. klasse rækker: %1", - "Plane.getRows2": "2. klasse rækker (%1)", - "Plane.seats": "Sæder: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sæder =", - "Plane.description1": "Et fly har et antal rækker af passagersæder. Hver række indeholder fire sæder.", - "Plane.description2": "Et fly har to pladser i cockpittet (til pilot og med-pilot), og et antal rækker af passagersæder. Hver række indeholder fire sæder.", - "Plane.description3": "Et fly har to pladser i cockpittet (til pilot og med-pilot), og et antal rækker af 1. klasses og 2. klasses passagersæder. Hver 1. klasses række indeholder fire sæder. Hver 2. klasses række indeholder fem sæder.", - "Plane.instructions": "Opbyg en formel (nedenfor), der beregner det samlede antal pladser på flyet, hvis antal rækker ændres (ovenfor)." + "Code.trashTooltip": "Kassér alle blokke." } diff --git a/apps/json/de.json b/apps/json/de.json index c842b3612..dca3eb7ea 100644 --- a/apps/json/de.json +++ b/apps/json/de.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "Visuelle Programmierumgebung", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Erzeugten JavaScript-Code ansehen.", "Apps.linkTooltip": "Speichern und auf Bausteine verlinken.", "Apps.runTooltip": "Das Programm ausführen, das von den Bausteinen im Arbeitsbereich definiert ist.", @@ -35,24 +35,5 @@ "Code.discard": "Alle %1 Bausteine löschen?", "Code.title": "Code", "Code.blocks": "Bausteine", - "Code.trashTooltip": "Alle Bausteine verwerfen.", - "Apps.indexTitle": "Blockly-Anwendungen", - "Apps.indexFooter": "Blockly ist frei und Open Source. Um Code oder Übersetzungen für Blockly beizusteuern oder um Blockly in deiner eigenen Anwendung zu verwenden, besuche %1.", - "Apps.choiceIntro": "Blockly ist eine grafische Programmierumgebung. Unten sind einige Beispielanwendungen, die Blockly verwenden.", - "Apps.codeSubtitle": "Ein Blockly-Programm als JavaScript, Python, Dart oder XML exportieren.", - "Plane.plane": "Flugzeugsitzrechner", - "Apps.planeSubtitle": "Ein mathematisches Problem mit einer oder zwei Variablen lösen.", - "Plane.rows": "Reihen: %1", - "Plane.getRows": "Reihen (%1)", - "Plane.rows1": "Reihen der 1. Klasse: %1", - "Plane.getRows1": "Reihen der 1. Klasse (%1)", - "Plane.rows2": "Reihen der 2. Klasse: %1", - "Plane.getRows2": "Reihen der 2. Klasse (%1)", - "Plane.seats": "Sitze: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Sitze =", - "Plane.description1": "Ein Flugzeug hat eine Anzahl an Reihen mit Passagiersitzen. Jede Reihe enthält vier Sitze.", - "Plane.description2": "Ein Flugzeug hat zwei Sitze im Pilotenstand (für den Piloten und Co-Piloten) und eine Anzahl an Reihen mit Passagiersitzen. Jede Reihe enthält vier Sitze.", - "Plane.description3": "Ein Flugzeug hat zwei Sitze im Pilotenstand (für den Piloten und Co-Piloten) und eine Anzahl an Reihen mit Passagiersitzen der 1. und 2. Klasse. Jede 1.-Klasse-Reihe enthält vier Sitze. Jede 2.-Klasse-Reihe enthält fünf Sitze.", - "Plane.instructions": "Erstelle eine Formel (unten), die die gesamte Anzahl an Sitzen im Flugzeug berechnet, wenn die Reihen (oben) geändert werden." + "Code.trashTooltip": "Alle Bausteine verwerfen." } diff --git a/apps/json/diq.json b/apps/json/diq.json index 969e66e7b..9d0945ef6 100644 --- a/apps/json/diq.json +++ b/apps/json/diq.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "yew grafikê programkerdışê dormey", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Kodê JavaScriptê vıraştey bımocne.", "Apps.linkTooltip": "Qeyd ke û be blokan ra gıre de.", "Apps.runTooltip": "Cayê kari de programo ke terefê blokan ra name biyo, ey bıgurene.", @@ -31,15 +31,5 @@ "Code.badCode": "Xeta programi:%1", "Code.title": "Kod", "Code.blocks": "Bloki", - "Code.trashTooltip": "Blokan hemın çek", - "Plane.plane": "Hesabkerdoğê Cayê Tiyarey", - "Plane.rows": "Rêzi: %1", - "Plane.getRows": "rêzi(%1)", - "Plane.rows1": "Rêzê sınıfa verêne: %1", - "Plane.getRows1": "Rêzê sınıfa verêne (%1)", - "Plane.rows2": "Rêzê sınıfa dıyıne: %1", - "Plane.getRows2": "Rêzê sınıfa dıyıne (%1)", - "Plane.seats": "Paldangi: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "iskemey =" + "Code.trashTooltip": "Blokan hemın çek" } diff --git a/apps/json/el.json b/apps/json/el.json index 4c2f7a86b..7ef27182c 100644 --- a/apps/json/el.json +++ b/apps/json/el.json @@ -10,7 +10,7 @@ ] }, "Apps.subtitle": "γραφικό περιβάλλον προγραμματισμού", - "Apps.blocklyMessage": "Blockly (Μπλόκλι)", + "Blockly": "Blockly (Μπλόκλι)", "Apps.codeTooltip": "Δες τον κώδικα JavaScript που δημιουργήθηκε.", "Apps.linkTooltip": "Αποθηκεύει και συνδέει σε μπλοκ.", "Apps.runTooltip": "Εκτελεί το πρόγραμμα που ορίζεται από τα μπλοκ στον χώρο εργασίας.", @@ -38,24 +38,5 @@ "Code.discard": "Να διαγραφούν και τα %1 μπλοκ?", "Code.title": "Κώδικας", "Code.blocks": "Μπλοκ", - "Code.trashTooltip": "Απόρριψη όλων των μπλοκ.", - "Apps.indexTitle": "Εφαρμογές Blockly", - "Apps.indexFooter": "To Blockly είναι ανοικτού κώδικα και δωρεάν. Για να συνεισφέρετε σε κώδικα ή μεταφράσεις στο Blockly, ή για να χρησιμοποιήσετε το Blockly στη δική σας εφαρμογή, επισκεφτείτε το %1.", - "Apps.choiceIntro": "Το Blockly είναι ένα γραφικό περιβάλλον προγραμματισμού. Παρακάτω είναι μερικά δείγματα εφαρμογών που χρησιμοποιούν το Μπλόκλι.", - "Apps.codeSubtitle": "Για να εξάγεις πρόγραμμα γραμμένο σε Μπλόκλι στις γλώσσες JavaScript, Python, Dart ή XML.", - "Plane.plane": "Υπολογισμός Θέσεων Σε Αεροπλάνο", - "Apps.planeSubtitle": "Λύσε μαθηματικό πρόβλημα με μία ή δύο μεταβλητές.", - "Plane.rows": "Σειρές: %1", - "Plane.getRows": "σειρές (%1)", - "Plane.rows1": "Σειρές 1ης θέσης: %1", - "Plane.getRows1": "Σειρές 1ης θέσης (%1)", - "Plane.rows2": "Σειρές 2ης θέσης: %1", - "Plane.getRows2": "Σειρές 2ης θέσης (%1)", - "Plane.seats": "Καθίσματα: %1", - "Plane.placeholder": ";", - "Plane.setSeats": "καθίσματα =", - "Plane.description1": "Ένα αεροπλάνο έχει έναν συγκεκριμένο αριθμό σειρών καθισμάτων επιβατών. Κάθε σειρά έχει τέσσερα καθίσματα.", - "Plane.description2": "Ένα αεροπλάνο έχει δύο καθίσματα στον θάλαμο διακυβέρνησης (για τον κυβερνήτη και τον συγκυβερνήτη), καθώς και έναν αριθμό από σειρές καθισμάτων επιβατών. Κάθε σειρά έχει τέσσερα καθίσματα.", - "Plane.description3": "Ένα αεροπλάνο έχει δύο καθίσματα στον θάλαμο διακυβέρνησης (για τον κυβερνήτη και τον συγκυβερνήτη), καθώς και έναν αριθμό σειρών καθισμάτων για την 1η και 2η θέση. Κάθε σειρά της 1ης θέσης έχει τέσσερα καθίσματα και κάθε σειρά της 2ης θέσης έχει πέντε καθίσματα.", - "Plane.instructions": "Φτιάξε έναν τύπο (κάτω) που θα υπολογίζει τον συνολικό αριθμό καθισμάτων του αεροπλάνου καθώς αλλάζουν οι σειρές (πάνω)." + "Code.trashTooltip": "Απόρριψη όλων των μπλοκ." } diff --git a/apps/json/en.json b/apps/json/en.json index 8f68e2594..fa67537fd 100644 --- a/apps/json/en.json +++ b/apps/json/en.json @@ -1,12 +1,12 @@ { "@metadata": { "author": "Ellen Spertus ", - "lastupdated": "2014-11-12 14:45:51.736026", + "lastupdated": "2014-11-14 14:57:01.750962", "locale": "en", "messagedocumentation" : "qqq" }, "Apps.subtitle": "a visual programming environment", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "See generated JavaScript code.", "Apps.linkTooltip": "Save and link to blocks.", "Apps.runTooltip": "Run the program defined by the blocks in the workspace.", @@ -34,24 +34,5 @@ "Code.discard": "Delete all %1 blocks?", "Code.title": "Code", "Code.blocks": "Blocks", - "Code.trashTooltip": "Discard all blocks.", - "Apps.indexTitle": "Blockly Apps", - "Apps.indexFooter": "Blockly is free and open source. To contribute code or translations to Blockly, or to use Blockly in your own app, visit %1.", - "Apps.choiceIntro": "Blockly is a graphical programming environment. Below are some sample applications that use Blockly.", - "Apps.codeSubtitle": "Export a Blockly program into JavaScript, Python, Dart or XML.", - "Plane.plane": "Plane Seat Calculator", - "Apps.planeSubtitle": "Solve a math problem with one or two variables.", - "Plane.rows": "Rows: %1", - "Plane.getRows": "rows (%1)", - "Plane.rows1": "1st class rows: %1", - "Plane.getRows1": "1st class rows (%1)", - "Plane.rows2": "2nd class rows: %1", - "Plane.getRows2": "2nd class rows (%1)", - "Plane.seats": "Seats: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "seats =", - "Plane.description1": "An airplane has a number of rows of passenger seats. Each row contains four seats.", - "Plane.description2": "An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats.", - "Plane.description3": "An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats.", - "Plane.instructions": "Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above)." + "Code.trashTooltip": "Discard all blocks." } diff --git a/apps/json/es.json b/apps/json/es.json index f957b23e1..1ce73e690 100644 --- a/apps/json/es.json +++ b/apps/json/es.json @@ -9,7 +9,7 @@ ] }, "Apps.subtitle": "un entorno de programación visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Mira el código JavaScript generado.", "Apps.linkTooltip": "Guarda conexión a los bloques.", "Apps.runTooltip": "Ejecute el programa definido por los bloques en el área de trabajo.", @@ -37,24 +37,5 @@ "Code.discard": "¿Eliminar todos los bloques %1?", "Code.title": "Código", "Code.blocks": "Bloques", - "Code.trashTooltip": "Descartar todos los bloques.", - "Apps.indexTitle": "Apps de Blockly", - "Apps.indexFooter": "Blockly es gratuito y de código abierto. Para contribuir con el código o las traducciones de Blockly, o para utilizar Blockly en tu propia aplicación, visita %1.", - "Apps.choiceIntro": "Blockly es un entorno gráfico de programación. A continuación se presentan algunas aplicaciones de ejemplo que utilizan Blockly.", - "Apps.codeSubtitle": "Exportar un programa Blockly en JavaScript, Python, Dart o XML.", - "Plane.plane": "Calculadora de asientos de avión", - "Apps.planeSubtitle": "Resuelve un problema matemático con una o dos variables.", - "Plane.rows": "Filas: %1", - "Plane.getRows": "filas (%1)", - "Plane.rows1": "Filas de primera clase: %1", - "Plane.getRows1": "Filas de primera clase: (%1)", - "Plane.rows2": "Filas de segunda clase: %1", - "Plane.getRows2": "Filas de segunda clase: (%1)", - "Plane.seats": "Asientos: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "asientos =", - "Plane.description1": "Un avión  tiene un número de filas de asientos de pasajeros. Cada fila contiene cuatro asientos.", - "Plane.description2": "Un avión tiene dos asientos en la cabina de vuelo (para el piloto y co-piloto), y un número de filas de asientos de pasajeros. Cada fila contiene cuatro asientos.", - "Plane.description3": "Un avión tiene dos asientos en la cabina de vuelo (para el piloto y co-piloto), y un número de filas de asientos para pasajeros de primera y segunda clase. Cada fila de la primera clase contiene cuatro asientos. Cada fila de la segunda clase contiene cinco asientos.", - "Plane.instructions": "Construir una fórmula (abajo) que calcule el número total de asientos en el avión cuando las filas sean cambiadas (arriba)." + "Code.trashTooltip": "Descartar todos los bloques." } diff --git a/apps/json/eu.json b/apps/json/eu.json index a92efa4c8..46a4d6adf 100644 --- a/apps/json/eu.json +++ b/apps/json/eu.json @@ -5,7 +5,7 @@ "Subi" ] }, - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Ikusi sorturiko JavaScript kodea.", "Apps.linkTooltip": "Gorde eta lotura sortu.", "Apps.runProgram": "Programa exekutatu", @@ -28,8 +28,5 @@ "Apps.textVariable": "testua", "Code.title": "Kodea", "Code.blocks": "Blokeak", - "Code.trashTooltip": "Bloke guztiak baztertu.", - "Plane.seats": "Eserlekuak: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "eserlekuak =" + "Code.trashTooltip": "Bloke guztiak baztertu." } diff --git a/apps/json/fa.json b/apps/json/fa.json index 3cb3dd81f..05623a541 100644 --- a/apps/json/fa.json +++ b/apps/json/fa.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "یک محیط برنامه‌نویسی بصری", - "Apps.blocklyMessage": "بلوکی", + "Blockly": "بلوکی", "Apps.codeTooltip": "دیدن کد جاوااسکریپت ایجادشده.", "Apps.linkTooltip": "ذخیره و پیوند به بلوک‌ها.", "Apps.runTooltip": "اجرای برنامهٔ تعریف‌شده توسط بلوک‌ها در فضای کار.", @@ -34,24 +34,5 @@ "Code.discard": "حذف همهٔ بلاک‌های %1؟", "Code.title": "کد", "Code.blocks": "بلوک‌ها", - "Code.trashTooltip": "دورریختن همهٔ بلوک‌ها.", - "Apps.indexTitle": "برنامه‌های بلوکلی", - "Apps.indexFooter": "بلوکلی رایگان و متن‌باز است. برای مشارکت کد یا ترجمهٔ بلوکلی یا استفاده از بلوکلی در برنامهٔ خودتان، %1 را ببینید.", - "Apps.choiceIntro": "بلوکلی یک محیط برنامه‌نویسی گرافیک است. در زیر نمونه برنامه‌هایی وجود دارد که از بلوکلی استفاده می‌کند.", - "Apps.codeSubtitle": "خارج‌سازی یک برنامه بلوکلی به جاوااسکریپت، پایتون، دارت و اکس‌ام‌ال.", - "Plane.plane": "محاسبه‌گر صندلی‌های هواپیما", - "Apps.planeSubtitle": "حل یک مسألهٔ ریاضی با یک یا دو متغییر.", - "Plane.rows": "ردیف: %1", - "Plane.getRows": "ردیف‌ها (%1)", - "Plane.rows1": "اولین ردیف کلاس: %1", - "Plane.getRows1": "اولین کلاس ردیف‌ها (%1)", - "Plane.rows2": "دومین کلاس ردیف: %1", - "Plane.getRows2": "دومین کلاس ردیف‌ها (%1)", - "Plane.seats": "صندلی‌ها: %1", - "Plane.placeholder": "؟", - "Plane.setSeats": "صندلی‌ها =", - "Plane.description1": "یک هواپیما تعداد از صندلی‌های مسافرین را دارد. هر ردیف شمال چهار صندلی است.", - "Plane.description2": "یک هواپیما دو صندلی در عرشهٔ پرواز دارد (برای خلبان و کمک خلبان) و تعدادی صندلی مسافرین. هر ردیف شامل چهار صندلی است.", - "Plane.description3": "یک هواپیما دو صندلی در کابین خلبان دارد (برای خلبان و کمک خلبان) و تهداد از صندلی‌ها مسافرین درجه یک و درجه دو. هر ردیف درجه یک شامل چهار صندلی است. هر ردیف درجه دو شامل پنج صندلی است.", - "Plane.instructions": "یک فرمول بسازید (پایین) که تعداد کل صندلی‌های هواپیما با تغییر ردیف را حساب کند (بالا)." + "Code.trashTooltip": "دورریختن همهٔ بلوک‌ها." } diff --git a/apps/json/fi.json b/apps/json/fi.json index f31c72540..230f412d7 100644 --- a/apps/json/fi.json +++ b/apps/json/fi.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "visuaalinen ohjelmointiympäristö", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Katso luotua JavaScript-koodia.", "Apps.runProgram": "Suorita ohjelma", "Apps.resetProgram": "Nollaa", diff --git a/apps/json/fr.json b/apps/json/fr.json index 4f3706063..b865a670f 100644 --- a/apps/json/fr.json +++ b/apps/json/fr.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "un environnement de programmation visuel", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Voir le code JavaScript généré.", "Apps.linkTooltip": "Sauvegarder et lier aux blocs.", "Apps.runTooltip": "Lancer le programme défini par les blocs dans l’espace de travail.", @@ -35,24 +35,5 @@ "Code.discard": "Supprimer tous les %1 blocs ?", "Code.title": "Code", "Code.blocks": "Blocs", - "Code.trashTooltip": "Jeter tous les blocs.", - "Apps.indexTitle": "Applications Blockly", - "Apps.indexFooter": "Blockly est libre et avec code ouvert. Pour contribuer au code ou aux traductions de Blockly, ou pour utiliser Blockly dans votre propre application, allez sur %1.", - "Apps.choiceIntro": "Blockly est un environnement de programmation graphique. Ci-dessous quelques exemples d’application qui utilisent Blockly.", - "Apps.codeSubtitle": "Exporter un programme Blockly en JavaScript, Python, Dart ou XML.", - "Plane.plane": "Calculateur de sièges d’avion", - "Apps.planeSubtitle": "Résoudre un problème de math avec une ou deux variables.", - "Plane.rows": "Rangées : %1", - "Plane.getRows": "rangées (%1)", - "Plane.rows1": "rangées de première classe : %1", - "Plane.getRows1": "rangées de première classe (%1)", - "Plane.rows2": "rangées de seconde classe : %1", - "Plane.getRows2": "rangées de seconde classe (%1)", - "Plane.seats": "Sièges : %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sièges =", - "Plane.description1": "Un avion a un nombre de rangées de sièges passager. Chaque rangée contient quatre sièges.", - "Plane.description2": "Un avion a deux sièges dans le poste de pilotage (pour le pilote et le copilote), et un certain nombre de rangées de sièges passager. Chaque rangée contient quatre sièges.", - "Plane.description3": "Un avion a deux sièges dans la cabine de pilotage (pour le pilote et le copilote), et un certain nombre de rangées de sièges passager de première et seconde classes. Chaque rangée de première classe contient quatre sièges. Chaque rangée de seconde classe contient cinq sièges.", - "Plane.instructions": "Construire une formule (ci-dessous) qui calcule le nombre total de sièges dans l’avion quand le nombre de rangées est modifié (ci-dessus)." + "Code.trashTooltip": "Jeter tous les blocs." } diff --git a/apps/json/gl.json b/apps/json/gl.json index 64441f4f0..26940d7c7 100644 --- a/apps/json/gl.json +++ b/apps/json/gl.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "un contorno de programación visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Ver o código JavaScript xerado.", "Apps.linkTooltip": "Gardar e crear unha ligazón aos bloques.", "Apps.runTooltip": "Executar o programa definido polos bloques no espazo de traballo.", @@ -33,24 +33,5 @@ "Code.discard": "Queres borrar os %1 bloques?", "Code.title": "Código", "Code.blocks": "Bloques", - "Code.trashTooltip": "Descartar todos os bloques.", - "Apps.indexTitle": "Aplicacións de Blockly", - "Apps.indexFooter": "Blockly é gratuíto e de código aberto. Para achegar código ou traducións a Blockly, ou para usar Blockly na túa propia aplicación, visita %1.", - "Apps.choiceIntro": "Blockly é un contorno de programación gráfico. A continuación hai algúns exemplos de aplicacións que usan Blockly.", - "Apps.codeSubtitle": "Exporta un programa de Blockly en JavaScript, Python, Dart ou XML.", - "Plane.plane": "Calculadora de asentos de avión", - "Apps.planeSubtitle": "Resolve un problema matemático dunha ou dúas variables.", - "Plane.rows": "Filas: %1", - "Plane.getRows": "filas (%1)", - "Plane.rows1": "Filas de primeira clase: %1", - "Plane.getRows1": "Filas de primeira clase (%1)", - "Plane.rows2": "Filas de segunda clase: %1", - "Plane.getRows2": "Filas de segunda clase (%1)", - "Plane.seats": "Asentos: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "asentos =", - "Plane.description1": "Un avión ten un número de filas de asentos para os pasaxeiros. Cada fila contén catro asentos.", - "Plane.description2": "Un avión ten dous asentos na cabina (para o piloto e mais o copiloto) e un número de filas de asentos para os pasaxeiros. Cada fila contén catro asentos.", - "Plane.description3": "Un avión ten dous asentos na cabina (para o piloto e mais o copiloto) e un número de filas de asentos de primeira e segunda clase para os pasaxeiros. Cada fila de primeira clase contén catro asentos. Cada fila de segunda clase contén cinco asentos.", - "Plane.instructions": "Elabora unha fórmula (embaixo) que calcule o número total de asentos do avión a medida que varíe o número de filas (enriba)." + "Code.trashTooltip": "Descartar todos os bloques." } diff --git a/apps/json/gn.json b/apps/json/gn.json index 8917747e6..0ce0430d7 100644 --- a/apps/json/gn.json +++ b/apps/json/gn.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "peteĩ techa myatyrõ hekoha", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Ehecha JavaScript mba'e apopyre.", "Apps.linkTooltip": "Oñongatu ha ombojoaju vorekuéra.", "Apps.runTooltip": "Pejapo pe jejaporã vorekuéra ohechauka akue tembiapo rendápe.", @@ -22,6 +22,5 @@ "Apps.httpRequestError": "Peteĩ tekojepe'y ohechauka.", "Apps.linkAlert": "Temboja'o nde vorekuéra ko joaju ndie:\n\n%1", "Apps.listVariable": "tysýi", - "Apps.textVariable": "jehaipy", - "Plane.placeholder": "?" + "Apps.textVariable": "jehaipy" } diff --git a/apps/json/he.json b/apps/json/he.json index ddfed022b..5ee3253dd 100644 --- a/apps/json/he.json +++ b/apps/json/he.json @@ -10,7 +10,7 @@ ] }, "Apps.subtitle": "סביבת תיכנות חזותי", - "Apps.blocklyMessage": "בלוקלי", + "Blockly": "בלוקלי", "Apps.codeTooltip": "הצגת קוד ה־Javascript שנוצר.", "Apps.linkTooltip": "שמירה וקישור לקטעי קוד.", "Apps.runTooltip": "הרצת התכנית שהוגדרה על ידי קטעי הקוד שבמרחב העבודה.", @@ -38,24 +38,5 @@ "Code.discard": "האם למחוק את כל %1 קטעי הקוד?", "Code.title": "קוד", "Code.blocks": "קטעי קוד", - "Code.trashTooltip": "השלך את כל קטעי הקוד.", - "Apps.indexTitle": "אפליקציות בלוקלי", - "Apps.indexFooter": "בלוקלי הוא חינם ומבוסס קוד פתוח. בכדי לתרום קוד או תרגומים לבלוקלי, או כדי להשתמש בבלוקלי באפליקציה שלך, בקר ב־ %1", - "Apps.choiceIntro": "בלוקלי היא סביבת פיתוח גרפית. בהמשך ישנן מספר דוגמאות לאפליקציות אשר משתמשות בבלוקלי.", - "Apps.codeSubtitle": "ייצא תוכנית בלוקלי לג'אווה סקריפט, פייתון או XML.", - "Plane.plane": "מחשבון מושב במטוס", - "Apps.planeSubtitle": "פתור בעייה חשבונית עם משתנה אחד או שניים", - "Plane.rows": "שורות: %1", - "Plane.getRows": "שורות (%1)", - "Plane.rows1": "שורות במחלקה ראשונה: %1", - "Plane.getRows1": "שורות במחלקה ראשונה (%1)", - "Plane.rows2": "שורות במחלקה שנייה: %1", - "Plane.getRows2": "שורות במחלקה שנייה: (%1)", - "Plane.seats": "מושבים: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "מושבים =", - "Plane.description1": "במטוס יש מספר שורות עם מושבי נוסעים. בכל שורה יש ארבעה מושבים.", - "Plane.description2": "במטוס יש שני מושבים עבור הצוות (בשביל הטייס וטייס המשנה), ומספר שורות עם מושבי נוסעים. בכל שורה יש ארבעה מושבים.", - "Plane.description3": "במטוס יש שני מושבים עבור הצוות (בשביל הטייס וטייס המשנה), ומספר שורות מושבים במחלקת הנוסעים הראשונה ובמחלקת הנוסעים השנייה. כל שורה במחלקה הראשונה מכילה ארבעה מושבים. כל שורה במחלקה השנייה מכילה חמישה מושבים.", - "Plane.instructions": "בנה נוסחה (למטה) אשר תחשב את סך כל המושבים במטוס בהתאם לשינוי מספר השורות (למעלה)." + "Code.trashTooltip": "השלך את כל קטעי הקוד." } diff --git a/apps/json/hi.json b/apps/json/hi.json index 93afb89a3..c16f4de70 100644 --- a/apps/json/hi.json +++ b/apps/json/hi.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "एक विषुयल प्रोग्रामिंग वातावरण", - "Apps.blocklyMessage": "Blockly (ब्लॉकली)", + "Blockly": "Blockly (ब्लॉकली)", "Apps.codeTooltip": "बना हुआ जावास्क्रिप्ट कोड देखें।", "Apps.linkTooltip": "सेव करें और ब्लॉक से लिंक करें।", "Apps.runTooltip": "कार्यस्थान में ब्लॉक द्वारा वर्णन किया गया प्रोग्राम चलाएँ।", @@ -32,23 +32,5 @@ "Code.discard": "सारे %1 ब्लॉक हटाएँ?", "Code.title": "कोड", "Code.blocks": "ब्लॉक", - "Code.trashTooltip": "सभी ब्लाकों को त्यागें।", - "Apps.indexTitle": "ब्लॉकली एप्स", - "Apps.indexFooter": "ब्लॉकली मुफ़्त और ओपन सोर्स है। ब्लॉकली का अनुवाद, कोड योगदान या आपने एप्स मे इस्तेमाल करने के लिए, %1 पर जाएँ।", - "Apps.choiceIntro": "ब्लॉकली एक ग्राफिकल प्रोग्रामिंग वातावरण है। नीचे कुछ सैम्पल ऐप्लकेशन हैं जो की ब्लॉकली का उपयोग करते हैं।", - "Apps.codeSubtitle": "ब्लॉकली प्रोग्राम को जावास्क्रिप्ट, पायथन या XML में निर्यात करें।", - "Plane.plane": "विमान सीट कैलक्यूलेटर", - "Apps.planeSubtitle": "एक या दो चर के साथ गणित की समस्या को हल करें।", - "Plane.rows": "पंक्तियाँ: %1", - "Plane.getRows": "पंक्तियाँ (%1)", - "Plane.rows1": "प्रथम श्रेणी की पंक्तियाँ: %1", - "Plane.getRows1": "प्रथम श्रेणी की पंक्तियाँ (%1)", - "Plane.rows2": "द्वितीय श्रेणी की पंक्तियाँ: %1", - "Plane.getRows2": "द्वितीय श्रेणी की पंक्तियाँ (%1)", - "Plane.seats": "सीटें: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "सीटें =", - "Plane.description1": "हवाई जहाज मे यात्री सीटों की कई पंक्तियों है। प्रत्येक पंक्ति में चार सीटें हैं।", - "Plane.description2": "हवाई जहाज के फ्लाइट डेक में दो सीटें हैं (पायलट और सह-पायलट के लिए), और यात्री सीटों की कई पंक्तियाँ हैं। प्रत्येक पंक्ति में चार सीटें हैं।", - "Plane.description3": "हवाई जहाज के फ्लाइट डेक में दो सीटें हैं (पायलट और सह-पायलट के लिए), और प्रथम और द्वितीय श्रेणी की यात्री सीटों की कई पंक्तियाँ हैं। प्रत्येक प्रथम श्रेणी पंक्ति में चार सीटें हैं। प्रत्येक द्वितीय श्रेणी पंक्ति में पांच सीटें हैं।" + "Code.trashTooltip": "सभी ब्लाकों को त्यागें।" } diff --git a/apps/json/hrx.json b/apps/json/hrx.json index 943de723d..4c0bdeff6 100644 --- a/apps/json/hrx.json +++ b/apps/json/hrx.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "Visuelle Programmierumgebung", - "Apps.blocklyMessage": "Blockly\n\nI translated all the Blockly strings into Riograndenser Hunsrückisch (Hrx / var. of German) using I.E. The translations didn't save - I got this message in a faded yellow background: \"Saving the translation failed: Unknown error\" . \n\nIn Translatewiki.net Web chat Nemo_bis suggested I try and save the translations in Chromium - I tried that and it worked. However, now I have to copy and paste all my work from IE to Chrome, unless there is another way of doing that ... \n\nNow I'm in the process of transferring over the translations ... but they are all done (so no duplicate work is needed!).\n\n~~~~\nPaul Beppler (talk) 23:30, 12 March 2014 (UTC)", + "Blockly": "Blockly", "Apps.codeTooltip": "Generierte Java-COde oonsiehn.", "Apps.linkTooltip": "Speichre und auf Bausten verlinke.", "Apps.runTooltip": "Das Programm ausfüahre, das von den Bausten im Oorweitsbereich definiert ist.", @@ -33,24 +33,5 @@ "Code.discard": "All %1 Bausten lösche?", "Code.title": "Code", "Code.blocks": "Bausten", - "Code.trashTooltip": "All Bausten verwerfe.", - "Apps.indexTitle": "Blockly-Oonwennunge", - "Apps.indexFooter": "Blockly ist frei und Open Source. Um Code orrer Üwersetzunge für Blockly beizusteire oder um Blockly in deiner eichne Oonwennung zu verwenne, besuch %1.", - "Apps.choiceIntro": "Blockly ist frei und Open Source. Um Code orrer Üwersetzunge für Blockly beizusteiere orrer um Blockly in deiner eichne Onwennung zu verwenne, besuch %1.", - "Apps.codeSubtitle": "En Blockly-Programm als JavaScript, Python, Dart orrer XML exportiere.", - "Plane.plane": "Fluchzeichsitzrechner", - "Apps.planeSubtitle": "En mathematisches Problem mit ener orrer zwooi Variable löse.", - "Plane.rows": "Reihe: %1", - "Plane.getRows": "Reihe (%1)", - "Plane.rows1": "Reihe von der 1. Klasse: %1", - "Plane.getRows1": "Reihe von der 1. Klasse (%1)", - "Plane.rows2": "Reihe von der 2. Klasse: %1", - "Plane.getRows2": "Reihe von der 2. Klasse (%1)", - "Plane.seats": "Sitz: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Sitze =", - "Plane.description1": "En Fluchzeich hot en Oonzohl an Reihe mit Passagiersitze. Jede Reih enthält vier Sitze.", - "Plane.description2": "En Fluchzeich hot zwooi Sitze im Pilotestand (für den Pilot und Co-Pilot) und en Oonzohl an Reihe mit Passagiersitze. Jede Reih enthält vier Sitze.", - "Plane.description3": "En Fluchzeich hot zwooi Sitze im Pilotstand (für den Pilot und Co-Pilot) und en Oonzohl an Reihe mit Passagiersitze der 1. und 2. Klasse. Jede 1.-Klasse-Reih enthält vier Sitze. Jede 2.-Klasse-Reih enthält fünf Sitze.", - "Plane.instructions": "Erstell en Formel (unne), die die gesamte Oonzohl an Sitze im Fluchzeich berechnet, wenn die Reihe (uwe) geännert sin." + "Code.trashTooltip": "All Bausten verwerfe." } diff --git a/apps/json/hu.json b/apps/json/hu.json index 4d81f1111..33c781faa 100644 --- a/apps/json/hu.json +++ b/apps/json/hu.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "egy vizuális programozási környezet", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "A JavaScript forráskód megtekintése.", "Apps.linkTooltip": "Hivatkozás létrehozása", "Apps.runTooltip": "Program futtatása.", @@ -34,24 +34,5 @@ "Code.discard": "Az összes %1 blokk törlése?", "Code.title": "Kódszerkesztő", "Code.blocks": "Blokkok", - "Code.trashTooltip": "Összes blokk törlése.", - "Apps.indexTitle": "Blockly alkalmazások", - "Apps.indexFooter": "A Blockly ingyenes és nyílt forráskódú. Segítsen a forráskódban, készítsen fordítást Blocklyhoz, vagy használja a Blocklyt saját alkalmazásában, látogasson el a %1 oldalra.", - "Apps.choiceIntro": "A Blockly egy grafikus programozási környezet. Az alábbiakban bemutatunk néhány példa alkalmazást.", - "Apps.codeSubtitle": "Blocklyval megírt programját exportálhatja JavaScript, Python, Dart vagy XML nyelven.", - "Plane.plane": "Repülőgép alkalmazás", - "Apps.planeSubtitle": "Oldjon meg matematikai problémát, egy vagy két változóval.", - "Plane.rows": "Sorok száma: %1", - "Plane.getRows": "Sorok száma (%1)", - "Plane.rows1": "1. osztály: %1 sor", - "Plane.getRows1": "1. osztály sorai (%1)", - "Plane.rows2": "2. osztály: %1 sor", - "Plane.getRows2": "2. osztály sorai (%1)", - "Plane.seats": "Ülések száma összesen: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Ülések száma =", - "Plane.description1": "Egy repülőgépen az utasok több sorban ülnek az utastérben. Az utastér minden sorában négy szék van.", - "Plane.description2": "Egy repülőgépnek 2 ülése van a pilótafülkében (a pilótának és a másodpilótának), az utasok több sorban ülnek az utastérben. Az utastér minden sorában négy szék van.", - "Plane.description3": "Egy repülőgépnek 2 ülése van a pilótafülkében (a pilótának és a másodpilótának), az utasok 1. és 2. osztályon utazhatnak. Az 1. osztályon négy szék van egy sorban. A 2. osztályon öt szék van egy sorban.", - "Plane.instructions": "Készítsd el a képletet (lent) amivel kiszámolható, hogy hány ülés van összesen a repülőgépen annak függvényében, ahogy (fent) állítod a sorok számát." + "Code.trashTooltip": "Összes blokk törlése." } diff --git a/apps/json/ia.json b/apps/json/ia.json index 2ba0109ea..750f67430 100644 --- a/apps/json/ia.json +++ b/apps/json/ia.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "un ambiente de programmation visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Vider le codice JavaScript generate.", "Apps.linkTooltip": "Salveguardar e ligar a blocos.", "Apps.runTooltip": "Executar le programma definite per le blocos in le spatio de travalio.", @@ -33,24 +33,5 @@ "Code.discard": "Deler tote le %1 blocos?", "Code.title": "Codice", "Code.blocks": "Blocos", - "Code.trashTooltip": "Abandonar tote le blocos.", - "Apps.indexTitle": "Applicationes Blockly", - "Apps.indexFooter": "Blockly es gratuite e con codice-fonte aperte. Pro contribuer codice o traductiones a Blockly, o pro usar Blockly in vostre application, visita %1.", - "Apps.choiceIntro": "Blockly es un ambiente de programmation graphic. Ecce alcun exemplos de applicationes que usa Blockly.", - "Apps.codeSubtitle": "Exportar un programma Blockly in JavaScript, Python, Dart o XMl.", - "Plane.plane": "Calculator de sedias de avion", - "Apps.planeSubtitle": "Resolver un problema mathematic con un o duo variabiles.", - "Plane.rows": "Filas: %1", - "Plane.getRows": "filas (%1)", - "Plane.rows1": "Filas de prime classe: %1", - "Plane.getRows1": "filas de prime classe (%1)", - "Plane.rows2": "Filas de secunde classe: %1", - "Plane.getRows2": "filas de secunde classe (%1)", - "Plane.seats": "Sedes: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sedes =", - "Plane.description1": "Un avion ha un numero de filas de sedes pro passageros. Cata fila contine quatro sedes.", - "Plane.description2": "Un avion ha duo sedes in le cabina (pro le pilota e le copilota) e un numero de filas de sedes pro passageros. Cata fila contine quatro sedes.", - "Plane.description3": "Un avion ha duo sedes in le cabina (pro le pilota e le copilota) e un numero de filas de sedes pro passageros del prime classe e del secunde classes. Cata fila del prime classe contine quatro sedes. Cata fila del secunde classe contine cinque sedes.", - "Plane.instructions": "Construe un formula (ci infra) que calcula le numero total de sedes in le avion quando le numero de filas es cambiate (ci supra)." + "Code.trashTooltip": "Abandonar tote le blocos." } diff --git a/apps/json/is.json b/apps/json/is.json index f03f83538..8e5bf875a 100644 --- a/apps/json/is.json +++ b/apps/json/is.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "sjónrænt forritunarumhverfi", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Sjá forritið sem JavaScript kóða.", "Apps.linkTooltip": "Vista og tengja við kubba.", "Apps.runTooltip": "Keyra forritið sem kubbarnir á vinnusvæðinu mynda.", @@ -33,24 +33,5 @@ "Code.discard": "Eyða öllum %1 kubbunum?", "Code.title": "Kóði", "Code.blocks": "Kubbar", - "Code.trashTooltip": "Fleygja öllum kubbum.", - "Apps.indexTitle": "Blockly forrit", - "Apps.indexFooter": "Blockly er ókeypis og opinn hugbúnaður. Ef þú vilt gefa kóða eða þýða fyrir Blockly eða nota það í eigin appi, líttu þá við á %1.", - "Apps.choiceIntro": "Blockly er sjónrænt forritunarumhverfi. Hér fyrir neðan eru nokkur sýnishorn af öppum sem nota Blockly.", - "Apps.codeSubtitle": "Þýða Blockly forrit yfir í JavaScript, Python, Dart eða XML.", - "Plane.plane": "Flugsætareiknir", - "Apps.planeSubtitle": "Leysa reikningsdæmi með einni eða tveimur breytum.", - "Plane.rows": "Raðir: %1", - "Plane.getRows": "raðir (%1)", - "Plane.rows1": "Raðir 1. farrými: %1", - "Plane.getRows1": "raðir 1. farrými (%1)", - "Plane.rows2": "Raðir 2. farrými: %1", - "Plane.getRows2": "raðir 2. farrými (%1)", - "Plane.seats": "Sæti: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sæti =", - "Plane.description1": "Flugvél er með einhvern fjölda sætaraða fyrir farþega. Í hverri röð eru fjögur sæti.", - "Plane.description2": "Flugvél er með tvö sæti í stjórnklefa (fyrir flugmanninn og aðstoðarflugmanninn) og einhvern fjölda sætaraða fyrir farþega. Hver sætaröð hefur fjögur sæti.", - "Plane.description3": "Flugvél er með tvö sæti í stjórnklefa (fyrir flugmanninn og aðstoðarflugmanninn) og einhvern fjölda sætaraða fyrir farþega á 1. og 2. farrými. Hver sætaröð á 1. farrými hefur fjögur sæti. Hver sætaröð á 2. farrými hefur fimm sæti.", - "Plane.instructions": "Búðu til formúlu (hér fyrir neðan) sem reiknar heildarfjölda sæta í flugvélinni eftir því sem röðunum er breytt (hér fyrir ofan)." + "Code.trashTooltip": "Fleygja öllum kubbum." } diff --git a/apps/json/it.json b/apps/json/it.json index 9125b36e7..66f94cfa1 100644 --- a/apps/json/it.json +++ b/apps/json/it.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "un ambiente di programmazione grafico", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Vedi il codice JavaScript generato.", "Apps.linkTooltip": "Salva e collega ai blocchi.", "Apps.runTooltip": "Esegui il programma definito dai blocchi nell'area di lavoro.", @@ -35,24 +35,5 @@ "Code.discard": "Cancellare tutti i %1 blocchi?", "Code.title": "Codice", "Code.blocks": "Blocchi", - "Code.trashTooltip": "Elimina tutti i blocchi.", - "Apps.indexTitle": "Applicazioni Blockly", - "Apps.indexFooter": "Blockly è gratuito e open source. Per contribuire al codice o alle traduzioni per Blockly, o utilizzare Blockly nella tua applicazione, visita %1.", - "Apps.choiceIntro": "Blockly è un ambiente di programmazione grafico. Di seguito sono riportati alcuni esempi di applicazioni che utilizzano Blockly.", - "Apps.codeSubtitle": "Esporta un programma Blockly in JavaScript, Python, Dart o XML.", - "Plane.plane": "Calcolo posti aereo", - "Apps.planeSubtitle": "Risolvi un problema di matematica con una o due variabili.", - "Plane.rows": "File: %1", - "Plane.getRows": "file (%1)", - "Plane.rows1": "File 1ª classe: %1", - "Plane.getRows1": "file 1ª classe (%1)", - "Plane.rows2": "File 2ª classe: %1", - "Plane.getRows2": "File 2ª classe (%1)", - "Plane.seats": "Sedili: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sedili =", - "Plane.description1": "Un aeroplano ha un numero di file contenenti i posti a sedere dei passeggeri. Ogni fila, contiene quattro posti a sedere.", - "Plane.description2": "Un aeroplano ha due posti a sedere nella cabina di pilotaggio (per il pilota e co-pilota), e un numero di file con i posti a sedere dei passeggeri. Ogni fila contiene quattro posti.", - "Plane.description3": "Un aereo ha due posti nella cabina di pilotaggio (per il pilota e il co-pilota), e un numero di file in prima e seconda classe, con i posti a sedere dei passeggeri. Ogni fila della prima classe contiene quattro posti. Quelle invece della seconda classe, ne contengono cinque.", - "Plane.instructions": "Costruisci una formula (sotto) che calcola il numero totale di posti a sedere su un aeroplano, così come cambiano le file di posti (sopra)." + "Code.trashTooltip": "Elimina tutti i blocchi." } diff --git a/apps/json/ja.json b/apps/json/ja.json index bbc1a5b25..708127394 100644 --- a/apps/json/ja.json +++ b/apps/json/ja.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "視覚的なプログラミング環境", - "Apps.blocklyMessage": "ブロックリー", + "Blockly": "ブロックリー", "Apps.codeTooltip": "生成された JavaScript コードを表示します。", "Apps.linkTooltip": "ブロックの状態を保存してリンクを取得します。", "Apps.runTooltip": "ブロックで作成したプログラムを実行します。", @@ -34,24 +34,5 @@ "Code.discard": "%1 個すべてのブロックを消しますか?", "Code.title": "コード", "Code.blocks": "ブロック", - "Code.trashTooltip": "すべてのブロックを消します。", - "Apps.indexTitle": "ブロックリーのアプリ", - "Apps.indexFooter": "ブロックリーはフリーでありオープンソースです。ブロックリーのコードや翻訳に貢献、またはブロックリーを自分のアプリに使用するには、%1 を参照してください。", - "Apps.choiceIntro": "ブロックリーはグラフィカルなプログラミング環境です。以下に列挙したサンプル アプリケーションはブロックリーを使用しています。", - "Apps.codeSubtitle": "ブロックリーのプログラムを JavaScript、Python、Dart、XML にエクスポートしましょう。", - "Plane.plane": "飛行機座席計算機", - "Apps.planeSubtitle": "1変数または2変数の数学の問題を解きましょう。", - "Plane.rows": "列の数: %1", - "Plane.getRows": "列の数 (%1)", - "Plane.rows1": "ファーストクラスの列数: %1", - "Plane.getRows1": "ファーストクラスの列数 (%1)", - "Plane.rows2": "セカンドクラスの列数: %1", - "Plane.getRows2": "セカンドクラスの列数 (%1)", - "Plane.seats": "座席の数: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "座席の数 =", - "Plane.description1": "飛行機に乗客の座席の列があります。それぞれの列に 4 つの座席があります。", - "Plane.description2": "飛行機には、操縦室の 2 つの座席 (操縦士と副操縦士) と、乗客の座席の列があります。それぞれの列に 4 つの座席があります。", - "Plane.description3": "飛行機には、操縦室の 2 つの座席 (操縦士と副操縦士) と、ファーストクラスとセカンドクラスの乗客の座席の列があります。それぞれの列に、ファーストクラスでは 4 つの座席、セカンドクラスでは 5 つの座席があります。", - "Plane.instructions": "飛行機の座席の数を計算する式を、上で列の数を変更しても正しくなるように、下に入力してください。" + "Code.trashTooltip": "すべてのブロックを消します。" } diff --git a/apps/json/keys.json b/apps/json/keys.json index 8fefef16f..a5343742e 100644 --- a/apps/json/keys.json +++ b/apps/json/keys.json @@ -1,6 +1,6 @@ { "Apps.subtitle": "9151382257658567281", -"Apps.blocklyMessage": "6650354588969822092", +"Blockly": "213423414108596757", "Apps.codeTooltip": "5838195295317713027", "Apps.linkTooltip": "5391382062551588177", "Apps.runTooltip": "6316320629891574281", @@ -28,24 +28,5 @@ "Code.discard": "1020451542663054555", "Code.title": "339365101010834276", "Code.blocks": "586801704101593425", -"Code.trashTooltip": "1406728939680691839", -"Apps.indexTitle": "7974005368401638032", -"Apps.indexFooter": "6787275955604631342", -"Apps.choiceIntro": "5293485729310732301", -"Apps.codeSubtitle": "5453010276194242854", -"Plane.plane": "6646116297668869388", -"Apps.planeSubtitle": "6523129415371026229", -"Plane.rows": "286555642257111053", -"Plane.getRows": "7030918043298347994", -"Plane.rows1": "7091637686507441682", -"Plane.getRows1": "5622822520334788359", -"Plane.rows2": "6523489254328705062", -"Plane.getRows2": "8347578891541780742", -"Plane.seats": "6636919311618748816", -"Plane.placeholder": "1649099567159388799", -"Plane.setSeats": "990695256953568910", -"Plane.description1": "7784699858027886282", -"Plane.description2": "4755413400587385256", -"Plane.description3": "1327005465775917626", -"Plane.instructions": "3872872459414039837" +"Code.trashTooltip": "1406728939680691839" } diff --git a/apps/json/ko.json b/apps/json/ko.json index e1fba5128..c9cc1136c 100644 --- a/apps/json/ko.json +++ b/apps/json/ko.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "시각 프로그래밍 환경", - "Apps.blocklyMessage": "블록리", + "Blockly": "블록리", "Apps.codeTooltip": "생성된 자바스크립트 코드를 봅니다.", "Apps.linkTooltip": "블록을 저장하고 링크를 가져옵니다.", "Apps.runTooltip": "작업 공간에서 블록으로 정의된 프로그램을 실행합니다.", @@ -35,24 +35,5 @@ "Code.discard": "모든 블록 %1개를 삭제하겠습니까?", "Code.title": "코드", "Code.blocks": "블록", - "Code.trashTooltip": "모든 블록을 버립니다.", - "Apps.indexTitle": "블록리 앱", - "Apps.indexFooter": "Blockly는 공짜이며 오픈소스입니다. Blockly의 코드 또는 번역에 기여하거나 당신의 프로그램에서 Blockly를 이용하려면, %1 을 방문하세요.", - "Apps.choiceIntro": "Blockly는 그래픽 프로그래밍 환경을 제공합니다. 아래는 Blockly를 사용하는 몇가지 예시 프로그램들입니다.", - "Apps.codeSubtitle": "블록리 프로그램을 자바스크립트, 파이썬, 다트 또는 XML로 내보냅니다.", - "Plane.plane": "비행기 좌석 계산기", - "Apps.planeSubtitle": "하나 또는 두개의 변수를 가진 수학 문제를 풉니다.", - "Plane.rows": "행 수: %1", - "Plane.getRows": "행 수 (%1)", - "Plane.rows1": "1등석 행 수: %1", - "Plane.getRows1": "1등석 행 수 (%1)", - "Plane.rows2": "2등석 행 수: %1", - "Plane.getRows2": "2등석 행 수 (%1)", - "Plane.seats": "좌석 수: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "좌석수 =", - "Plane.description1": "비행기는 승객 좌석의 행 수가 있습니다. 각 행에는 시트 네 개가 포함되어 있습니다.", - "Plane.description2": "비행기는 비행 갑판(조종사와 부조종사용)에서 좌석 두 개가 있고, 승객 좌석의 행 수가 있습니다. 각 행에는 시트 네 개가 포함되어 있습니다.", - "Plane.description3": "비행기는 비행 갑판(조종사와 부조종사용)에서 좌석 두 개가 있고, 1등석과 2등석 승객 좌석의 행 수가 있습니다. 각 1등석 행에는 시트 네 개가 포함되어 있습니다. 각 2등석 행에는 시트 다섯 개가 포함되어 있습니다.", - "Plane.instructions": "행이 바뀐(위) 비행기에 좌석의 총 수를 계산하는 공식(아래)을 구축하세요." + "Code.trashTooltip": "모든 블록을 버립니다." } diff --git a/apps/json/lb.json b/apps/json/lb.json index 32ea8411d..ba58d2058 100644 --- a/apps/json/lb.json +++ b/apps/json/lb.json @@ -4,7 +4,7 @@ "Robby" ] }, - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Generéierte JavaScript Code kucken.", "Apps.linkTooltip": "Späicheren a mat de Bléck verlinken", "Apps.runProgram": "Programm ausféieren", @@ -26,18 +26,5 @@ "Code.badCode": "Programmfeeler:\n%1", "Code.discard": "All %1 Bléck läschen?", "Code.title": "Code", - "Code.blocks": "Bléck", - "Plane.plane": "Rechemaschinne fir d'Sëtzer am Fliger", - "Apps.planeSubtitle": "E mathematesche Problem mat enger oder zwou Variabele léisen.", - "Plane.rows": "Reien: %1", - "Plane.getRows": "Reien (%1)", - "Plane.rows1": "1. Klass Reien: %1", - "Plane.getRows1": "1. Klass Reien (%1)", - "Plane.rows2": "2. Klass Reien: %1", - "Plane.getRows2": "2. Klass Reien (%1)", - "Plane.seats": "Sëtzer: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Sëtzer =", - "Plane.description1": "E Fliger huet en gewëss Zuel vu Reie mat Sëtzer fir d'Passagéier. All Rei huet véier Sëtzer.", - "Plane.description2": "E Fliger huet zwee Sëtzer am Cockpit (fir de Pilot an de Co-Pilot), an eng gewëss Zuel vu Reie mat Sëtzer fir d'Passagéier. An all Rei si véier Sëtzer." + "Code.blocks": "Bléck" } diff --git a/apps/json/lrc.json b/apps/json/lrc.json index ddefbd2e4..10662778d 100644 --- a/apps/json/lrc.json +++ b/apps/json/lrc.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "یه راساگه برنامه نیسی قاول دیئن", - "Apps.blocklyMessage": "قلف بیه", + "Blockly": "قلف بیه", "Apps.codeTooltip": "سیل کد جاوا اسکریپت راس بیه بکید", "Apps.linkTooltip": "بخشیانه ذخیره و هوم پیوند بکید", "Apps.runProgram": "برنامه نه اجرا بکیت", @@ -27,10 +27,5 @@ "Code.badCode": "خطا برنامه:%1", "Code.discard": " %1 د همه برشتیا نه پاکسا کو?", "Code.title": "کد", - "Code.blocks": "بخشیا", - "Plane.plane": "زمی", - "Plane.getRows": "ردیفیا (%1)", - "Plane.seats": "صندلیا:%1", - "Plane.placeholder": "؟", - "Plane.setSeats": "صنه لیا=" + "Code.blocks": "بخشیا" } diff --git a/apps/json/lt.json b/apps/json/lt.json index fff1b098d..7939efd98 100644 --- a/apps/json/lt.json +++ b/apps/json/lt.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "vizualus programavimas", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Peržiūrėti atitinkantį JavaScript kodą.", "Apps.linkTooltip": "Išsaugoti (sugeneruoti URL nuorodą).", "Apps.runTooltip": "Vykdyti programą.", @@ -35,16 +35,5 @@ "Code.discard": "Ar ištrinti visus %1 blokus?", "Code.title": "Kodas", "Code.blocks": "Blokai", - "Code.trashTooltip": "Pašalinti visus blokus.", - "Apps.indexTitle": "Blocky programėlės", - "Apps.indexFooter": "Blocky yra atviro kodo sistema. Norintys prisidėti ar naudoti, žr. %1.", - "Apps.choiceIntro": "Blocky yra vizuali programavimo aplinka. Žemiau yra keli pritaikymo pavyzdžiai.", - "Apps.codeSubtitle": "Eksportuokite Blocky programą į JavaScript, Python, Dart arba XML.", - "Plane.plane": "Lėktuvo sėdimų vietų skaičiuoklė", - "Apps.planeSubtitle": "Išspręskite lygtį - užrašykite atsakymo formulę pagal turimus duomenis.", - "Plane.rows": "Eilutės: %1", - "Plane.getRows": "eilutės (%1)", - "Plane.seats": "Vietos: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Vietos =" + "Code.trashTooltip": "Pašalinti visus blokus." } diff --git a/apps/json/lv.json b/apps/json/lv.json index 0e52e20a9..041ba608f 100644 --- a/apps/json/lv.json +++ b/apps/json/lv.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "vizuāla programmēšanas vide", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Apskatīt ģenerēto JavaScript pirmkodu.", "Apps.linkTooltip": "Saglabāt un piesaistīt blokiem.", "Apps.runTooltip": "Palaidiet programmu, ko definē bloki darbvietā.", @@ -34,19 +34,5 @@ "Code.discard": "Vai izdzēst visus %1 blokus?", "Code.title": "Pirmkods", "Code.blocks": "Bloki", - "Code.trashTooltip": "Izmest visus blokus.", - "Plane.plane": "Lidmašīna", - "Plane.rows": "Rindas: %1", - "Plane.getRows": "rindas (%1)", - "Plane.rows1": "Pirmās klases rindas: %1", - "Plane.getRows1": "Pirmās klases rindas (%1)", - "Plane.rows2": "Otrās klases rindas: %1", - "Plane.getRows2": "Otrās klases rindas (%1)", - "Plane.seats": "Sēdvietas: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sēdvietas =", - "Plane.description1": "Lidmašīnā ir noteikts rindu skaits pasažieru sēdvietām. Katra rinda satur četras sēdvietas.", - "Plane.description2": "Lidmašīnā ir divas vietas pilotu kabīnē (pilots un otrais pilots) un vairākas rindas ar pasažieru sēdvietām. Katra rinda satur četras sēdvietas.", - "Plane.description3": "Lidmašīnā ir divas vietas pilotu kabīnē (pilots un otrais pilots) un vairākas rindas ar pirmās un otrās klases pasažieru sēdvietām. Katra pirmās klases pasažieru rinda satur četras sēdvietas. Katra otrās klases pasažieru rinda satur piecas sēdvietas.", - "Plane.instructions": "Izveidojiet formulu (zemāk), kas aprēķina kopējo sēdvietu skaitu lidmašīnā, ja rindas tiek mainītas (augšējā attēlā)." + "Code.trashTooltip": "Izmest visus blokus." } diff --git a/apps/json/mg.json b/apps/json/mg.json index 2ad162be1..b0c799895 100644 --- a/apps/json/mg.json +++ b/apps/json/mg.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "Tontolo fanoratam-pandaharana ara-pijery", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Hijery ny kaody JavaScript namboarina.", "Apps.linkTooltip": "Hitahiry ary hampirohy amin'ny bolongana.", "Apps.runTooltip": "Handefa ny fandaharana voafaritry ny bolongana ao amin'ny erana iasana.", @@ -33,12 +33,5 @@ "Code.discard": "Hamafa ny bolongana %1?", "Code.title": "Kaody", "Code.blocks": "Bolongana", - "Code.trashTooltip": "Hanary ny bolongana rehetra.", - "Apps.indexTitle": "Fandaharana Blockly", - "Apps.indexFooter": "Malalaka ary open-souce i Blockly. Vangio %1 raha tia handray anjara amin'ny renifango na amin'ny dikan-teny.", - "Apps.choiceIntro": "Tontolo fanoratana fandaharana ara-tsary i Blockly. Eo ambany ireo santiônam-pandaharana mampiasa an'i Blockly.", - "Apps.codeSubtitle": "Hamoaka ny fandaharana Blockly amin'ny JavaScript, Python na XML.", - "Plane.plane": "Mpikajy sezam-piaramanidina", - "Apps.planeSubtitle": "Hamaha olana matematika mampiasa ova iray na roa.", - "Plane.setSeats": "seza =" + "Code.trashTooltip": "Hanary ny bolongana rehetra." } diff --git a/apps/json/mk.json b/apps/json/mk.json index d6d758bc9..a3c9b804d 100644 --- a/apps/json/mk.json +++ b/apps/json/mk.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "визуелна околина за програмирање", - "Apps.blocklyMessage": "Блокли", + "Blockly": "Блокли", "Apps.codeTooltip": "Погл. создадениот JavaScript-код.", "Apps.linkTooltip": "Зачувај и стави врска до блокчињата.", "Apps.runTooltip": "Пушти го програмот определен од блокчињата во работниот простор.", @@ -34,19 +34,5 @@ "Code.discard": "Да ги избришам сите %1 блокчиња?", "Code.title": "Код", "Code.blocks": "Блокчиња", - "Code.trashTooltip": "Отстрани ги сите блокчиња.", - "Plane.plane": "Авион", - "Plane.rows": "Редови: %1", - "Plane.getRows": "редови (%1)", - "Plane.rows1": "Редови од I класа: %1", - "Plane.getRows1": "Редови од I класа (%1)", - "Plane.rows2": "Редови од II класа: %1", - "Plane.getRows2": "Редови од II класа: (%1)", - "Plane.seats": "Седишта: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "места =", - "Plane.description1": "Авионот има извесен број редови од седишта. Секој ред има по четири седишта.", - "Plane.description2": "Авионот има две седишта во пилотската кабина (за пилотот и копилотот) и повеќе редови седишта за патници. Секој ред има по четири седишта.", - "Plane.description3": "Авионот има две седишта во пилотската кабина (за пилотот и копилотот) и повеќе редови седишта за патници од I и II класа. Секој ред од II класа има по пет седишта.", - "Plane.instructions": "Составете формула (подолу) што го пресметува вкупниот број на седишта во авионот како што се менуваат редовите (погоре)." + "Code.trashTooltip": "Отстрани ги сите блокчиња." } diff --git a/apps/json/mr.json b/apps/json/mr.json index da70f81f1..b1827cbd6 100644 --- a/apps/json/mr.json +++ b/apps/json/mr.json @@ -13,13 +13,5 @@ "Apps.listVariable": "यादी", "Apps.textVariable": "मजकूर", "Code.title": "संकेत", - "Code.blocks": "ब्लॉक्स", - "Plane.plane": "विमान", - "Plane.getRows": "रांगा (%1)", - "Plane.rows1": "प्रथम श्रेणीच्या ओळी: %1", - "Plane.getRows2": "दुसऱ्या वर्गाची रांग(%1)", - "Plane.setSeats": "आसने =", - "Plane.description1": "विमानात,प्रवाश्यांसाठी आसनांच्या अनेक रांगा असतात.प्रत्येक रांगेत चार आसने असतात.", - "Plane.description2": "विमानास, विमानन कक्षात दोन आसने असतात(वैमानिक व सह-वैमानिकासाठी) व प्रवाश्यांसाठी आसनांच्या अनेक रांगा असतात.प्रत्येक रांगेत चार आसने असतात.", - "Plane.description3": "विमानास, विमानन कक्षात दोन आसने असतात(वैमानिक व सह-वैमानिकासाठी) व प्रथम श्रेणी व द्वितीय श्रेणी आसनांच्या अनेक रांगा असतात.प्रत्येक प्रथम श्रेणीच्या रांगेत चार आसने असतात.प्रत्येक द्वितीय श्रेणीच्या रांगेत पाच आसने असतात." + "Code.blocks": "ब्लॉक्स" } diff --git a/apps/json/ms.json b/apps/json/ms.json index 38ed6c8a5..7d6da19a8 100644 --- a/apps/json/ms.json +++ b/apps/json/ms.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "persekitaran pengaturcaraan visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Lihat kod JavaScript yang dihasilkan.", "Apps.linkTooltip": "Simpan dan pautkan kepada blok.", "Apps.runTooltip": "Jalankan aturcara yang ditetapkan oleh blok-blok di dalam ruang kerja.", @@ -36,24 +36,5 @@ "Code.discard": "Hapuskan kesemua %1 blok?", "Code.title": "Kod", "Code.blocks": "Blok", - "Code.trashTooltip": "Buang semua blok.", - "Apps.indexTitle": "Aplikasi Blockly", - "Apps.indexFooter": "Blockly adalah bebas dan bersumber terbuka. Bagi menyumbang kod atau terjemahan kepada Blockly, atau menggunakan Blockly dalam aplikasi anda, lawati %1.", - "Apps.choiceIntro": "Blockly ialah sebuah persekitaran pengaturcaraan grafik. Di bawah ialah beberapa contoh aplikasi yang menggunakan Blockly.", - "Apps.codeSubtitle": "Eksport suatu atur cara Blockly ke dalam JavaScript, Python, Dart atau XML.", - "Plane.plane": "Pengira Tempat Duduk Kapal Terbang", - "Apps.planeSubtitle": "Selesaikan masalah matematik dengan satu dua pemboleh ubah.", - "Plane.rows": "Baris: %1", - "Plane.getRows": "baris (%1)", - "Plane.rows1": "Baris kelas pertama: %1", - "Plane.getRows1": "baris kelas pertama (%1)", - "Plane.rows2": "Baris kelas ke-2: %1", - "Plane.getRows2": "baris kelas ke-2 (%1)", - "Plane.seats": "Tempat duduk: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "tempat duduk =", - "Plane.description1": "Sebuah kapal terbang mempunyai sebilangan baris tempat duduk penumpang. Setiap baris mengandungi empat tempat duduk.", - "Plane.description2": "Sebuah kapal terbnag mempunyai tempat duduk di kokpit (untuk juruterbang dan pembantunya) dan sebilangan baris tempat duduk penumpang. Setiap baris mengandungi empat tempat duduk.", - "Plane.description3": "Sebuah kapal terbnag mempunyai tempat duduk di kokpit (untuk juruterbang dan pembantunya) dan sebilangan baris tempat duduk penumpang kelas pertama dan kelas kedua. Setiap baris kelas pertama mengandungi empat tempat duduk. Setiap baris kelas pertama mengandungi lima tempat duduk.", - "Plane.instructions": "Wujudkan formula (di bawah) yang mengira jumlah tempat duduk di dalam kapal terbang sedangkan baris-barisnya diubah (di atas)." + "Code.trashTooltip": "Buang semua blok." } diff --git a/apps/json/nb.json b/apps/json/nb.json index b7928f1bb..f091dbbf8 100644 --- a/apps/json/nb.json +++ b/apps/json/nb.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "Et visuelt programmeringsmiljø", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Se generert JavaScriptkode", "Apps.linkTooltip": "Lagre og lenke til blokker.", "Apps.runTooltip": "Kjør programmet definert av blokken i arbeidsområdet.", @@ -34,24 +34,5 @@ "Code.discard": "Slett alle %1 blokker?", "Code.title": "Kode", "Code.blocks": "Blokker", - "Code.trashTooltip": "Fjern alle blokker", - "Apps.indexTitle": "Blocklyprogram", - "Apps.indexFooter": "Blockly er gratis og har en åpen kildekode. FOr å bidra med kode eller oversettelser til Blockly, eller for å bruke Blockly i din egen app, se %1.", - "Apps.choiceIntro": "Blockly er et grafisk programmeringsmiljø. Under er noen eksempelprogram som bruker Blockly.", - "Apps.codeSubtitle": "Eksporter et Blockly-program til JavaScript, Python, Dart eller XML.", - "Plane.plane": "Flysetekalkulator", - "Apps.planeSubtitle": "Løs et matematisk problem med én eller to variabler.", - "Plane.rows": "Rader: %1", - "Plane.getRows": "rader (%1)", - "Plane.rows1": "Rader i første klasse: %1", - "Plane.getRows1": "Rader i første klasse (%1)", - "Plane.rows2": "Rader i andre klasse: %1", - "Plane.getRows2": "Rader i andre klasse (%1)", - "Plane.seats": "Seter: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "seter =", - "Plane.description1": "Et fly har et antall rader med passasjerseter. Hver rad inneholder fire seter.", - "Plane.description2": "Et fly har to seter i cockpit (for piloten og andrepiloten), og et antall rader med passasjerseter. Hver rad inneholder fire seter.", - "Plane.description3": "Et fly har to seter i cockpit (for piloten og andrepiloten), og et antall rader med passasjerseter på første og andre klasse. Hver av radene på første klasse har fire seter. Hver av radene på andre klasse har fem seter.", - "Plane.instructions": "Bygg en formel (under) som beregner det totale antall seter på flyet etter hvert som radene endres (over)." + "Code.trashTooltip": "Fjern alle blokker" } diff --git a/apps/json/ne.json b/apps/json/ne.json index 3d8c32914..e053d900a 100644 --- a/apps/json/ne.json +++ b/apps/json/ne.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "एक भिज्युअल प्रोग्रामिङ्ग वातावरण", - "Apps.blocklyMessage": "Blockly(ब्लकली)", + "Blockly": "Blockly(ब्लकली)", "Apps.runProgram": "अनुप्रयोग चलाउने", "Apps.resetProgram": "रिसेट गर्नुहोस्", "Apps.dialogOk": "हुन्छ", @@ -21,6 +21,5 @@ "Apps.listVariable": "सूची", "Apps.textVariable": "पाठ", "Code.title": "कोड", - "Code.blocks": "ब्लकहरू", - "Plane.placeholder": "?" + "Code.blocks": "ब्लकहरू" } diff --git a/apps/json/nl.json b/apps/json/nl.json index 4ed4ede03..ce8ed1d64 100644 --- a/apps/json/nl.json +++ b/apps/json/nl.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "een visuele programmeeromgeving", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Bekijk de gemaakte JavaScriptcode.", "Apps.linkTooltip": "Opslaan en koppelen naar blokken.", "Apps.runTooltip": "Voer het programma uit dat met de blokken in de werkruimte is gemaakt.", @@ -34,24 +34,5 @@ "Code.discard": "Alle %1 blokken verwijderen?", "Code.title": "Code", "Code.blocks": "Blokken", - "Code.trashTooltip": "Alle blokken verwijderen", - "Apps.indexTitle": "Blockly Apps", - "Apps.indexFooter": "Blockly is gratis en open source. Ga naar %1 om code of vertalingen bij te dragen of vertalingen aan Blockly, of Blockly te gebruiken in uw eigen app.", - "Apps.choiceIntro": "Blockly is een grafische programmeeromgeving. Hieronder treft u een aantal voorbeeldtoepassingen aan die gebruikmaken van Blockly.", - "Apps.codeSubtitle": "Een Blocklyprogramma exporteren naar JavaScript, Python, Dart of XML.", - "Plane.plane": "Vliegtuigstoelencalculator", - "Apps.planeSubtitle": "Een wiskundige probleem met een of twee variabelen oplossen.", - "Plane.rows": "Rijen: %1", - "Plane.getRows": "rijen (%1)", - "Plane.rows1": "Rijen 1e klas: %1", - "Plane.getRows1": "Rijen 1e klas (%1)", - "Plane.rows2": "Rijen 2e klas: %1", - "Plane.getRows2": "Rijen 2e klas (%1)", - "Plane.seats": "Zitplaatsen: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "stoelen=", - "Plane.description1": "Een vliegtuig heeft een aantal rijen met stoelen. Iedere rij heeft vier stoelen.", - "Plane.description2": "Een vliegtuig heeft twee stoelen in de cockpit (voor de piloot en de copiloot) en een aantal rijen met stoelen voor passagiers. Iedere rij bevat vier stoelen.", - "Plane.description3": "Een vliegtuig heeft twee stoelen in de cockpit (voor de piloot en de copiloot) en een aantal rijen voor 1e klasse en 2e klasse passagiers. Iedere rij in de 1e klasse heeft vier stoelen. Iedere rij in de 2e klasse heeft vijf stoelen.", - "Plane.instructions": "Maak hieronder een formule die het totale aantal stoelen in het vliegtuig berekent als het aantal rijen hierboven wordt aangepast." + "Code.trashTooltip": "Alle blokken verwijderen" } diff --git a/apps/json/oc.json b/apps/json/oc.json index faae4da31..07876f083 100644 --- a/apps/json/oc.json +++ b/apps/json/oc.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "un environament de programacion visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Veire lo còde JavaScript generat.", "Apps.linkTooltip": "Salva e liga als blòts.", "Apps.runTooltip": "Aviar lo programa definit pels blòts dins l’espaci de trabalh.", @@ -33,16 +33,5 @@ "Code.discard": "Suprimir totes los %1 blòts ?", "Code.title": "Còde", "Code.blocks": "Blòts", - "Code.trashTooltip": "Getar totes los blòts.", - "Apps.indexTitle": "Aplicacions Blockly", - "Plane.plane": "Calculador de sètis d’avion", - "Plane.rows": "Linhas : %1", - "Plane.getRows": "linhas (%1)", - "Plane.rows1": "linhas de primièra classa : %1", - "Plane.getRows1": "linhas de primièra classa (%1)", - "Plane.rows2": "linhas de segonda classa : %1", - "Plane.getRows2": "linhas de segonda classa (%1)", - "Plane.seats": "Sètis : %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sètis =" + "Code.trashTooltip": "Getar totes los blòts." } diff --git a/apps/json/pl.json b/apps/json/pl.json index f159d35b4..2287099b0 100644 --- a/apps/json/pl.json +++ b/apps/json/pl.json @@ -11,7 +11,7 @@ ] }, "Apps.subtitle": "graficzne środowisko programistyczne", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Zobacz wygenerowany kod JavaScript.", "Apps.linkTooltip": "Zapisz i podlinkuj do bloków", "Apps.runTooltip": "Uruchom program zdefinowany przez bloki w obszarze roboczym", @@ -39,24 +39,5 @@ "Code.discard": "Usunąć wszystkie %1 bloki?", "Code.title": "Kod", "Code.blocks": "Bloki", - "Code.trashTooltip": "Odrzuć wszystkie bloki.", - "Apps.indexTitle": "Aplikacje Blockly", - "Apps.indexFooter": "Blockly jest darmowe i rozwijane w ramach open source (wolnego oprogramowania). Jeżeli chcesz pracować nad kodem, tłumaczeniem Blockly, lub użyć go w swojej aplikacji, wejdź na %1.", - "Apps.choiceIntro": "Blockly jest graficznym środowiskiem programistycznym. Poniżej znajdziesz przykładowe aplikacje, które wykorzystują Blockly.", - "Apps.codeSubtitle": "Exportuj program napisany w Blockly do JavaScriptu, Pythona, Darta lub XMLa.", - "Plane.plane": "Kalkulator miejsc w samolocie.", - "Apps.planeSubtitle": "Rozwiąż zadanie matematyczne z jedną lub dwiema zmiennymi.", - "Plane.rows": "Rzędów: %1", - "Plane.getRows": "rzędów (%1)", - "Plane.rows1": "Rzędów w pierwszej klasie: %1", - "Plane.getRows1": "Rzędów w pierwszej klasie (%1)", - "Plane.rows2": "Rzędów w drugiej klasie: %1", - "Plane.getRows2": "Rzędów w drugiej klasie (%1)", - "Plane.seats": "Siedzeń: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "siedzeń =", - "Plane.description1": "Samolot ma kilka rzędów siedzeń pasażerów. Każdy rząd zawiera cztery miejsca.", - "Plane.description2": "Samolot ma dwa miejsca w kabinie pilotów (dla pierwszego i drugiego pilota) oraz rzędy siedzeń dla pasażerów. Każdy taki rząd składa się z czterech siedzeń.", - "Plane.description3": "Samolot ma dwa miejsca w kabinie pilotów (dla pierwszego i drugiego pilota) oraz rzędy siedzeń dla pasażerów pierwszej i drugiej klasy. Każdy rząd pierwszej klasy składa się z czterech siedzeń. Każdy rząd drugiej klasy składa się z pięciu siedzeń.", - "Plane.instructions": "Zbuduj wzór (poniżej), który pozwala obliczyć łączną liczbę siedzeń w samolocie w funkcji zmieniającej się liczby rzędów (powyżej)." + "Code.trashTooltip": "Odrzuć wszystkie bloki." } diff --git a/apps/json/pms.json b/apps/json/pms.json index ed7f7f480..ac5a347e2 100644 --- a/apps/json/pms.json +++ b/apps/json/pms.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "n'ambient ëd programassion visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Vëdde ël còdes JavaScript generà.", "Apps.linkTooltip": "Argistré e lijé ai blòch.", "Apps.runTooltip": "Fé andé ël programa definì dai blòch ant lë spassi ëd travaj.", @@ -33,24 +33,5 @@ "Code.discard": "Scancelé tuti ij %1 blòch?", "Code.title": "Còdes", "Code.blocks": "Blòch", - "Code.trashTooltip": "Scarté tuti ij blòch.", - "Apps.indexTitle": "Aplicassion Blockly", - "Apps.indexFooter": "Blockly a l'é a gràtis e a sorgiss duverta. Për contribuì al còdes o a le tradussion ëd Blockly, o për dovré Blockly an soa pròpia aplicassion, ch'a vìsita %1.", - "Apps.choiceIntro": "Blockly a l'é n'Ambient ëd programassion gràfica. Sì-sota a-i é dj'esempi d'aplicassion ch'a deuvro Blockly.", - "Apps.codeSubtitle": "Esporté un programa Blockly an JavaScript, Python, Dart o XML.", - "Plane.plane": "Calcolator ëd sedij d'avion", - "Apps.planeSubtitle": "Arzòlve un problema ëd matemàtica con un-a o doe variàbij.", - "Plane.rows": "Linie: %1", - "Plane.getRows": "linie (%1)", - "Plane.rows1": "linie ëd prima classa: %1", - "Plane.getRows1": "linie ëd prima classa (%1)", - "Plane.rows2": "linie ëd seconda classa: %1", - "Plane.getRows2": "linie ëd seconda classa (%1)", - "Plane.seats": "Sedij: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sedij =", - "Plane.description1": "N'avion a l'ha un nùmer ëd file ëd sedij da passëgé. Minca fila a l'ha quatr sedij.", - "Plane.description2": "N'avion a l'ha doi sedij ant la cabin-a ëd pilotage (për ël pilòta e ël cò-pilòta), e un chèich nùmer ëd file ëd sedij pr'ij passagé. Minca fila a conten quatr sedij.", - "Plane.description3": "N'avion a l'ha doi sedij ant la cabin-a ëd pilotage (për ël pilòta e ël cò-pilòta) e un chèich nùmer ëd file ëd sedij pr'ij passagé ëd prima e sconda classa. Minca fila ëd prima classa a conten quatr sedij. Minca fila ëd seconda classa a conten sinch sedij.", - "Plane.instructions": "Fabriché na fórmola (sì-sota) ch'a fa 'l cont dël nùmer total ëd sedij ant l'avion cand che ël nùmer dle file a cangia (sì-dzora)." + "Code.trashTooltip": "Scarté tuti ij blòch." } diff --git a/apps/json/pt-br.json b/apps/json/pt-br.json index 5b08bb0d1..e7bed3612 100644 --- a/apps/json/pt-br.json +++ b/apps/json/pt-br.json @@ -13,7 +13,7 @@ ] }, "Apps.subtitle": "um ambiente de programação visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Veja o código JavaScript gerado.", "Apps.linkTooltip": "Salvar e ligar aos blocos.", "Apps.runTooltip": "Execute o programa definido pelos blocos na área de trabalho.", @@ -41,24 +41,5 @@ "Code.discard": "Apagar todos os %1 blocos?", "Code.title": "Código", "Code.blocks": "Blocos", - "Code.trashTooltip": "Descartar todos os blocos.", - "Apps.indexTitle": "Aplicativos do Blockly", - "Apps.indexFooter": "Blockly é gratuito e de código aberto. Para contribuir com código ou traduções para o Blockly, ou para usar o Blockly em seu próprio aplicativo, visite %1.", - "Apps.choiceIntro": "Blockly é um ambiente de programação gráfica. A seguir alguns exemplos de aplicações que utilizam Blockly.", - "Apps.codeSubtitle": "Exporte um programa Blockly para JavaScript, Python, Dart ou XML.", - "Plane.plane": "Calculadora de Assentos em Avião", - "Apps.planeSubtitle": "Resolva um problema de matemática com uma ou duas variáveis.", - "Plane.rows": "Filas: %1", - "Plane.getRows": "filas (%1)", - "Plane.rows1": "filas na primeira classe: %1", - "Plane.getRows1": "filas na primeira classe (%1)", - "Plane.rows2": "filas na segunda classe: %1", - "Plane.getRows2": "filas na segunda classe (%1)", - "Plane.seats": "Assentos: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "assentos =", - "Plane.description1": "Um avião tem um número de filas de assentos para os passageiros. Cada fila contém quatro assentos.", - "Plane.description2": "Um avião tem dois assentos na cabine de comando (para o piloto e o copiloto) e um número de filas de assentos para os passageiros. Cada fila contém quatro assentos.", - "Plane.description3": "Um avião tem dois assentos na cabine de comando (para o piloto e o copiloto) e um número de filas de assentos na primeira e na segunda classe. Cada fila da primeira classe contém quatro assentos. Cada fila da segunda classe contém cinco assentos.", - "Plane.instructions": "Elabore uma fórmula (abaixo) que calcule o número total de assentos no avião a medida que as filas são alteradas (acima)." + "Code.trashTooltip": "Descartar todos os blocos." } diff --git a/apps/json/pt.json b/apps/json/pt.json index 1fb4845bd..18e41a246 100644 --- a/apps/json/pt.json +++ b/apps/json/pt.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "um ambiente de programação visual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Veja o código JavaScript gerado.", "Apps.linkTooltip": "Salva conexão com o blockly.", "Apps.runProgram": "Executar programa", @@ -31,6 +31,5 @@ "Code.badCode": "Erro do programa:\n%1", "Code.discard": "Eliminar todos os blocos (%1)?", "Code.title": "Código", - "Code.blocks": "Bloqueios", - "Plane.plane": "Calculador dos Bancos do Avião" + "Code.blocks": "Bloqueios" } diff --git a/apps/json/qqq.json b/apps/json/qqq.json index a7c3ef27e..7ffa9a8ec 100644 --- a/apps/json/qqq.json +++ b/apps/json/qqq.json @@ -1,6 +1,6 @@ { "Apps.subtitle": "A short description of Blockly.", - "Apps.blocklyMessage": "The project name. If readers of your language would know approximately how to pronounce 'Blockly', leave unchanged. Otherwise, include a transliteration in parentheses, such as the Russian: 'Blockly (Блoкли)'.", + "Blockly": "The project name. If readers of your language would know approximately how to pronounce 'Blockly', leave unchanged. Otherwise, include a transliteration in parentheses, such as the Russian: 'Blockly (Блoкли)'.", "Apps.codeTooltip": "tooltip - Pressing the button causes a program in the JavaScript computer language to be displayed, based on the program created by the user.", "Apps.linkTooltip": "tooltip - Clicking on this button will cause the current program to be saved and for a URL to be shown to later retrieve it.", "Apps.runTooltip": "tooltip - Pressing this button runs the computer program the user has written.", @@ -28,24 +28,5 @@ "Code.discard": "alert - Message shown after the user clicks on the 'discard all' icon. Selecting 'OK' (or the translated equivalent) causes all of the blocks to be discarded. Selecting 'Cancel' prevents blocks from being deleted.\n\nParameters:\n* %1 - number of blocks to be deleted. It is always an integer greater than or equal to 2.", "Code.title": "title - Title of this application, indicating that it is for writing arbitrary programs.\n{{Identical|Code}}", "Code.blocks": "tab text - Displays and allows editing of the user's program as blocks.\n{{Identical|Blocks}}", - "Code.trashTooltip": "tooltip - Clicking on this causes the user program to be discarded.", - "Apps.indexTitle": "page text - The word 'Apps' is short for 'Applications'. We chose it because it is more informal. This and the following messages currently appear at [http://blockly-demo.appspot.com/static/apps/index.html].", - "Apps.indexFooter": "page text - Text appearing at the end of the page. Parameters:\n* %1 - the Blockly URL", - "Apps.choiceIntro": "page text - This appears before a list of Blockly apps. Please use the same term for 'Blockly' as in {{msg-blockly|Apps.blocklyMessage}}.", - "Apps.codeSubtitle": "page text - A subtitle describing Blockly's [https://blockly-demo.appspot.com/static/apps/code/index.html Code application].", - "Plane.plane": "title - Specifies that this is Blockly's '''Plane''' (airplane) tutorial. The word 'plane' was chosen over 'airplane' in English because it is shorter and less formal.", - "Apps.planeSubtitle": "page text - A subtitle describing Blockly's [https://blockly-demo.appspot.com/static/apps/plane/index.html Plane application].", - "Plane.rows": "page text - Total number of rows of seats on an airplane.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.getRows": "block text - The number of rows on the airplane, to be used in a mathematical equation, such as: 'seats = 4 x '''rows (5)''''.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.rows1": "page text - The number of rows of first-class seats on the airplane. You can see the block at [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of first-class seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.getRows1": "block text - The number of rows of first-class seats on the, to be used in a mathematical equation. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of first-class seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.rows2": "page text - The number of rows of second-class seats on the airplane. %1 is an integer greater or equal to zero. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of second-class seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.getRows2": "block text - The number of rows of second-class (also called 'economy class') seats on the airplane, to be used in a mathematical expression.\n\nParameters:\n* %1 - number of rows of second-class seats on an airplane. It is always an integer greater than or equal to zero.", - "Plane.seats": "page text - The total number of seats on the airplane.\n\nParameters:\n* %1 - number of seats on an airplane. It is always either the next message or an integer greater than or equal to zero.", - "Plane.placeholder": "page text - A word or symbol indicating that this numeric value has not yet been determined.", - "Plane.setSeats": "block text - The first half of a mathematical equation determining the number of seats in an airplane, such as: ''''seats =''' 4 x rows'.", - "Plane.description1": "instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=1 this level], there is only one type of seat on the plane.", - "Plane.description2": "instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=2 this level], there are two types of seats on this plane.", - "Plane.description3": "instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3 this level], there are three types of seats on this plane. Be sure to use the same terms for '1st class' and '2nd class' as you did for the earlier messages.", - "Plane.instructions": "page text - This text appears below the airplane graphic and above the space for the user to create the formula. The number of rows an the graphic may be changed by the user with a slider. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=1] for a picture." + "Code.trashTooltip": "tooltip - Clicking on this causes the user program to be discarded." } diff --git a/apps/json/ro.json b/apps/json/ro.json index cc4d69cd3..e6e62bdc7 100644 --- a/apps/json/ro.json +++ b/apps/json/ro.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "un mediu de programare vizual", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Vizualizează codul JavaScript generat.", "Apps.linkTooltip": "Salvează și adaugă la blocuri.", "Apps.runTooltip": "Execută programul definit de către blocuri în spațiul de lucru.", @@ -36,24 +36,5 @@ "Code.discard": "Ștergi toate cele %1 (de) blocuri?", "Code.title": "Cod", "Code.blocks": "Blocuri", - "Code.trashTooltip": "Șterge toate blocurile.", - "Apps.indexTitle": "Aplicații Blockly", - "Apps.indexFooter": "Blockly este gratuit și open source. Pentru a contribui cu linii de cod sau traduceri la Blockly, sau pentru a folosi Blockly în propriile aplicații, vizitează %1.", - "Apps.choiceIntro": "Blockly este un mediu de programare vizual. Mai jos sunt listate câteva aplicații care folosesc Blockly.", - "Apps.codeSubtitle": "Exportă un program Blockly în JavaScript, Python, Dart sau XML.", - "Plane.plane": "Calculator pentru locurile dintr-un avion", - "Apps.planeSubtitle": "Rezolvă o problemă de matematică cu una sau două variabile.", - "Plane.rows": "Rânduri: %1", - "Plane.getRows": "rânduri (%1)", - "Plane.rows1": "rânduri de clasa I: %1", - "Plane.getRows1": "rânduri de clasa I (%1)", - "Plane.rows2": "rânduri de clasa a II-a: %1", - "Plane.getRows2": "rânduri de clasa a II-a (%1)", - "Plane.seats": "Scaune: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "scaune =", - "Plane.description1": "Un avion are un număr de rânduri cu scaune pentru pasageri. Fiecare rând conține patru scaune.", - "Plane.description2": "Un avion are două scaune în carlingă (pentru pilot și copilot) și un număr de rânduri cu scaune pentru pasageri. Fiecare rând conține patru scaune.", - "Plane.description3": "Un avion are două scaune în carlingă (pentru pilot și copilot) și un număr de rânduri cu scaune de clasa I și clasa a II-a pentru pasageri. Fiecare rând de clasa I conține patru scaune. Fiecare rând de clasa a II-a conține cinci scaune.", - "Plane.instructions": "Construiește o formulă (mai jos) care calculează numărul total de locuri dintr-un avion în timp ce rândurile se schimbă (mai sus)." + "Code.trashTooltip": "Șterge toate blocurile." } diff --git a/apps/json/ru.json b/apps/json/ru.json index 52c0688d2..5c389246f 100644 --- a/apps/json/ru.json +++ b/apps/json/ru.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "среда визуального программирования", - "Apps.blocklyMessage": "Blockly (Блoкли)", + "Blockly": "Blockly (Блoкли)", "Apps.codeTooltip": "Просмотреть созданный код JavaScript.", "Apps.linkTooltip": "Сохранить и показать ссылку на блоки.", "Apps.runTooltip": "Запустить программу, заданную блоками в рабочей области.", @@ -36,24 +36,5 @@ "Code.discard": "Удалить все блоки (%1)?", "Code.title": "Код", "Code.blocks": "Блоки", - "Code.trashTooltip": "Удалить все блоки.", - "Apps.indexTitle": "Приложения Blockly (Блокли)", - "Apps.indexFooter": "Блокли - бесплатное и открытое программное обеспечение. Чтобы поделиться своим кодом или переводами Блокли, чтобы использовать Блокли для своих приложений, - посетите %1.", - "Apps.choiceIntro": "Блокли это графическая среда программирования. Ниже приведены примеры приложений, использующих Блокли.", - "Apps.codeSubtitle": "Переведите программу Блокли на JavaScript, Python, Dart или XML.", - "Plane.plane": "Калькулятор посадочных мест в самолёте", - "Apps.planeSubtitle": "Решите математическую задачу с одной или двумя переменными.", - "Plane.rows": "Рядов: %1", - "Plane.getRows": "ряды (%1)", - "Plane.rows1": "Рядов 1-го класса: %1", - "Plane.getRows1": "ряды 1-го класса (%1)", - "Plane.rows2": "Рядов 2-го класса: %1", - "Plane.getRows2": "ряды 2-го класса (%1)", - "Plane.seats": "Мест: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "места =", - "Plane.description1": "В самолёте несколько рядов с пассажирскими местами. В каждом ряду 4 места.", - "Plane.description2": "В самолёте 2 места для пилота и его помощника, а также несколько рядов с пассажирскими местами. В каждом ряду 4 места.", - "Plane.description3": "В самолёте 2 места для пилота и его помощника, несколько рядов с пассажирскими местами первого класса, а также несколько рядов с пассажирскими местами второго класса. В каждом ряду первого класса 4 места. В каждом ряду второго класса 5 мест.", - "Plane.instructions": "Постройте формулу в области ниже, которая поможет рассчитать общее количество мест в самолёте (как на рисунке выше)." + "Code.trashTooltip": "Удалить все блоки." } diff --git a/apps/json/sc.json b/apps/json/sc.json index 3e32a93e0..af42a9365 100644 --- a/apps/json/sc.json +++ b/apps/json/sc.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "un'ambienti gràficu po programai", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Càstia su còdixi JavaScript ingenerau.", "Apps.linkTooltip": "Sarva e alliòngia a is brocus.", "Apps.runTooltip": "Arròllia su programa cumpostu de is brocus in s'àrea de traballu.", @@ -33,24 +33,5 @@ "Code.discard": "Scancellu su %1 de is brocus?", "Code.title": "Còdixi", "Code.blocks": "Brocus", - "Code.trashTooltip": "Boganci totu is brocus.", - "Apps.indexTitle": "Blockly Apps", - "Apps.indexFooter": "Blockly est free e open source. Po agiudai in sa codifica o in sa furriadura de Blockly, o po imperai Blockly in sa app cosa tua, bisita %1.", - "Apps.choiceIntro": "Blockly est un'ambienti gràficu po programai. Asuta agatas pariga de programas cuncordaus cun Blockly.", - "Apps.codeSubtitle": "Esporta unu programa Blockly in JavaScript, Python, Dart o XML.", - "Plane.plane": "Fai su contu de is cadironis de unu aparèchiu", - "Apps.planeSubtitle": "Arresòlvi unu problema de matemàtica cun d-una o duas variàbilis.", - "Plane.rows": "Fileras: %1", - "Plane.getRows": "fileras (%1)", - "Plane.rows1": "fileras de primu classi: %1", - "Plane.getRows1": "fileras de primu classi (%1)", - "Plane.rows2": "fileras de segunda classi: %1", - "Plane.getRows2": "fileras de segunda classi (%1)", - "Plane.seats": "Cadironis: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "cadironis =", - "Plane.description1": "Unu aparèchiu tenit unas cantu fileras de cadironis po passigeris. Dònnia filera tenit cuatru cadironis.", - "Plane.description2": "Unu aparèchiu tenit duus cadironis in sa cabina de cumandu (po su pilota e su co-pilota), e unas cantu fileras de cadironis po passigeris. Dònnia filera tenit cuatru cadironis.", - "Plane.description3": "Unu aparèchiu tenit duus cadironis in sa cabina de cumandu (po su pilota e su co-pilota), e unas cantu fileras de cadironis po passigeris de prima classi e de segunda classi. Dònnia filera de prima classi tenit cuatru cadironis. Dònnia filera de segunda classi tenit cincu cadironis.", - "Plane.instructions": "Cuncorda una formula (innoi asuta) chi cumpudit su numeru totali de postus a setzi in s'aparechiu, a segunda de comenti mudant is fileras de postus (innoi in susu)" + "Code.trashTooltip": "Boganci totu is brocus." } diff --git a/apps/json/sco.json b/apps/json/sco.json index 89520b857..2f08e3475 100644 --- a/apps/json/sco.json +++ b/apps/json/sco.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "ae veesual programin environment", - "Apps.blocklyMessage": "Blockly (Blocklie)", + "Blockly": "Blockly (Blocklie)", "Apps.codeTooltip": "See generated JavaScript code.", "Apps.linkTooltip": "Hain n airt til blocks.", "Apps.runTooltip": "Rin the program defined bi the blocks in the wairkspace.", @@ -33,24 +33,5 @@ "Code.discard": "Delyte aw %1 blocks?", "Code.title": "Code", "Code.blocks": "Blocks", - "Code.trashTooltip": "Hiff aw blocks.", - "Apps.indexTitle": "Blockly Apps", - "Apps.indexFooter": "Blockly is free n apen soorce. Tae contreebute code or owersets til Blockly, or tae uise Blockly in yer ain app, veesit %1.", - "Apps.choiceIntro": "Blockly is ae grapheecal programin environment. Ablo is some sample appleecations that uise Blockly.", - "Apps.codeSubtitle": "Export ae Blockly program intae JavaScript, Python, Dart or XML.", - "Plane.plane": "Airplane Seat Calculater", - "Apps.planeSubtitle": "Solve ae maths problem wi yin or twa vareeables.", - "Plane.rows": "Rows: %1", - "Plane.getRows": "rows (%1)", - "Plane.rows1": "1st claiss rows: %1", - "Plane.getRows1": "1st claiss rows (%1)", - "Plane.rows2": "2nt claiss rows: %1", - "Plane.getRows2": "2nt claiss rows (%1)", - "Plane.seats": "Seats: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "seats =", - "Plane.description1": "Aen airplane haes ae nummer o rows o passenger seats. Ilka row contains fower seats.", - "Plane.description2": "Aen airplane haes twa seats in the flicht deck (fer the pilot n co-pilot), n ae nummer o rows o passenger seats. Ilka row contains fower seats.", - "Plane.description3": "Aen airplane haes twa seats oan the flicht deck (fer the pilot n co-pilot), n ae nummer o rows o 1st claiss n 2nt claiss passenger seats. Ilka 1st claiss row contains fower seats. Ilka 2nt claiss row contains five seats.", - "Plane.instructions": "Big ae formula (ablo) that calculates the total nummer o seats oan the airplane aes the rows ar chynged (abuin)." + "Code.trashTooltip": "Hiff aw blocks." } diff --git a/apps/json/si.json b/apps/json/si.json index c812b63d2..bc1241f9d 100644 --- a/apps/json/si.json +++ b/apps/json/si.json @@ -17,19 +17,5 @@ "Apps.catProcedures": "ශ්‍රිත", "Apps.httpRequestError": "ඉල්ලීමෙහි දෝෂයක් තිබුනි.", "Apps.listVariable": "ලැයිස්තුව", - "Apps.textVariable": "පෙළ", - "Apps.planeSubtitle": "විචල්‍යයන් එකක් හෝ දෙකක් සමඟ ගණිත ගැටලුවක් විසඳන්න.", - "Plane.rows": "පේළි:%1", - "Plane.getRows": "පේළි(%1)", - "Plane.rows1": "පළමු පන්තියේ පේළි :%1", - "Plane.getRows1": "පළමු පන්තියේ පේළි(%1)", - "Plane.rows2": "දෙවන පන්තියේ පේලි :%1", - "Plane.getRows2": "දෙවන පන්තියේ පේළි(%1)", - "Plane.seats": "ආසන:%1", - "Plane.placeholder": "?", - "Plane.setSeats": "ආසන=", - "Plane.description1": "ගුවන් යානයක පේළි වලට සමාන ආසන සංඛයාවක් ඇත.සෑම පේලියකම ආසන 4ක් ඇත.", - "Plane.description2": "ගුවන් යානයක තට්ටුවේ අසන දෙකක් (ගුවන් නියමුවා සහ උප ගුවන් නියමුවා ට),සහ පේළි සංඛ්‍යාවට සමාන ආසන සංඛ්‍යාවක් ඇත.සෑම පේලියකම ආසන හතරක් ඇත.", - "Plane.description3": "ගුවන් යානයක තට්ටුවේ අසන දෙකක් (ගුවන් නියමුවා සහ උප ගුවන් නියමුවා ට),සහ පේළි සංඛ්‍යාවට සමාන පළමු හා දෙවන පන්තියේ ආසන සංඛ්‍යාවක් ඇත.සෑම පළමු පන්තියේ පේලියක්ම ආසන හතරක් ඇති අතර සෑම දෙවන පන්තියේ පේලියක්ම ආසන පහක් ඇත.", - "Plane.instructions": "(ඉහත)පේළි වෙනස් වූ විට සියලු ආසන සංඛ්‍යාව ගණනය කිරීමට ශ්‍රිතයක් තනන්න (පහත)." + "Apps.textVariable": "පෙළ" } diff --git a/apps/json/sk.json b/apps/json/sk.json index 713b8127a..3424fb660 100644 --- a/apps/json/sk.json +++ b/apps/json/sk.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "vizuálne programovacie prostredie", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Prezrieť vygenerovaný javascriptový kód.", "Apps.linkTooltip": "Uložiť a zdieľať odkaz na tento program.", "Apps.runTooltip": "Spustiť program, zložený z dielcov na pracovnej ploche.", @@ -35,19 +35,5 @@ "Code.discard": "Zmazať všetkých %1 dielcov?", "Code.title": "Kód", "Code.blocks": "Bloky", - "Code.trashTooltip": "Zahodiť všetky dielce.", - "Plane.plane": "Lietadlo", - "Plane.rows": "Rady: %1", - "Plane.getRows": "rady (%1)", - "Plane.rows1": "rady 1. trieda: %1", - "Plane.getRows1": "rady 1. trieda (%1)", - "Plane.rows2": "rady 2. trieda: %1", - "Plane.getRows2": "rady 2. trieda (%1)", - "Plane.seats": "Sedadiel: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "sedadlá =", - "Plane.description1": "Lietadlo má niekoľko radov sedadiel. Každý rad obsahuje štyri sedadlá.", - "Plane.description2": "Lietadlo má dve sedadlá v kabíne pilota (pre kapitána a kopilota), a veľa radov sedadiel pre cestujúcich. Každý rad obsahuje štyri sedadlá.", - "Plane.description3": "Lietadlo má dve sedadlá v kabíne pilota (pre kapitána a kopilota), a veľa radov sedadiel pre cestujúcich v 1. a 2. triede. Každý rad 1. triedy má štyri sedadlá. Každý rad 2. triedy má päť sedadiel.", - "Plane.instructions": "Napíš vzorec (dole), ktorý vypočíta celkový počet sedadiel v lietadle po zmene radov (hore)." + "Code.trashTooltip": "Zahodiť všetky dielce." } diff --git a/apps/json/sr.json b/apps/json/sr.json index c2075d9ee..7306dd8e1 100644 --- a/apps/json/sr.json +++ b/apps/json/sr.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "визуелно окружење за програмирање", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Погледајте генерисани JavaScript кôд.", "Apps.linkTooltip": "Сачувајте и повежите са блоковима.", "Apps.runTooltip": "Покрените програм заснован на блоковима у радном простору.", @@ -33,18 +33,5 @@ "Code.discard": "Обрисати %1 блокова?", "Code.title": "Кôд", "Code.blocks": "Блокови", - "Code.trashTooltip": "Одбаците све блокове.", - "Apps.indexTitle": "Апликације Blockly-ја", - "Apps.indexFooter": "Blockly је слободан програм отвореног кода. Да бисте допринели његовом коду или преводу или користили га у својој апликацији, посетите %1.", - "Apps.choiceIntro": "Blockly је графичко окружење за програмирање. Испод су као пример дате неке апликације које користе Blockly.", - "Apps.codeSubtitle": "Извезите програм Blockly-ја у JavaScript, Python, Dart или XML.", - "Plane.plane": "Калкулатор места у авиону", - "Apps.planeSubtitle": "Решите математички проблем помоћу једне или две променљиве.", - "Plane.rows1": "Редови 1. класе: %1", - "Plane.getRows1": "Редови 1. класе (%1)", - "Plane.rows2": "Редови 2. класе: %1", - "Plane.getRows2": "Редови 2. класе (%1)", - "Plane.seats": "Седишта: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "места =" + "Code.trashTooltip": "Одбаците све блокове." } diff --git a/apps/json/sv.json b/apps/json/sv.json index 420104cad..e24843fb9 100644 --- a/apps/json/sv.json +++ b/apps/json/sv.json @@ -7,7 +7,7 @@ ] }, "Apps.subtitle": "en visuell programmeringsmiljö", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Se genererad JavaScript-kod.", "Apps.linkTooltip": "Spara och länka till block.", "Apps.runTooltip": "Kör programmet som definierats av blocken i arbetsytan.", @@ -35,24 +35,5 @@ "Code.discard": "Radera alla %1 block?", "Code.title": "Kod", "Code.blocks": "Block", - "Code.trashTooltip": "Släng alla block.", - "Apps.indexTitle": "Blocklyprogram", - "Apps.indexFooter": "Blockly är gratis och har en öppen källkod. För att bidra till Blockly med kod eller översättningar, eller för att använda Blockly i din egen app, besök %1.", - "Apps.choiceIntro": "Blockly är en grafisk programmeringsmiljö. Nedan finns några exempelprogram som använder Blockly.", - "Apps.codeSubtitle": "Exportera ett Blockly-program till JavaScript, Python, Dart eller XML.", - "Plane.plane": "Plansäteskalkylator", - "Apps.planeSubtitle": "Lös ett matematiskt problem med en eller två variabler.", - "Plane.rows": "Rader: %1", - "Plane.getRows": "rader (%1)", - "Plane.rows1": "Rader i första klass: %1", - "Plane.getRows1": "Rader i första klass (%1)", - "Plane.rows2": "Rader i andra klass: %1", - "Plane.getRows2": "Rader i andra klass (%1)", - "Plane.seats": "Säten: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "säten =", - "Plane.description1": "Ett flygplan har ett antal rader med passagerarsäten. Varje rad innehåller fyra säten.", - "Plane.description2": "Ett flygplan har två säten i cockpiten (ett för piloten och ett för andrepiloten) och ett antal rader med passagerarsäten. Varje rad innehåller fyra säten.", - "Plane.description3": "Ett flygplan har två säten i cockpiten (ett för piloten och ett för andrepiloten) och ett antal rader med passagerarsäten i första och andra klass. Varje rad i första klass innehåller fyra säten. Varje rad i andra klass innehåller fem säten.", - "Plane.instructions": "Bygg en formel (nedan) som beräknar det totala antalet säten på flygplanet när raderna ändras (ovan)." + "Code.trashTooltip": "Släng alla block." } diff --git a/apps/json/sw.json b/apps/json/sw.json index 2a075878b..8e38c29ce 100644 --- a/apps/json/sw.json +++ b/apps/json/sw.json @@ -1,7 +1,7 @@ { "@metadata": [], "Apps.subtitle": "mazingira ya programu ya kuona", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Tazama mwandiko wa JavaScript inayotokana.", "Apps.linkTooltip": "Hifadhi na kiungo cha vishiku.", "Apps.runProgram": "Endesha Programu", diff --git a/apps/json/th.json b/apps/json/th.json index 0f81ad23b..99557cf6d 100644 --- a/apps/json/th.json +++ b/apps/json/th.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "ระบบการเขียนโปรแกรมด้วยรูปภาพ", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "ดูโค้ด JavaScript ที่ถูกสร้างขึ้น", "Apps.linkTooltip": "บันทึกและสร้างลิงก์มายังบล็อกเหล่านี้", "Apps.runTooltip": "เรียกใช้โปรแกรมตามที่กำหนดไว้ด้วยบล็อกที่อยู่ในพื้นที่ทำงาน", @@ -34,24 +34,5 @@ "Code.discard": "ต้องการลบบล็อกทั้ง %1 บล็อกใช่หรือไม่?", "Code.title": "เขียนโปรแกรม", "Code.blocks": "บล็อก", - "Code.trashTooltip": "ยกเลิกบล็อกทั้งหมด", - "Apps.indexTitle": "โปรแกรมประยุกต์ Blockly", - "Apps.indexFooter": "Blockly นั้นฟรีและเปิดเผยซอร์สโค้ด ถ้าต้องการช่วยเหลือในการพัฒนาโปรแกรม ช่วยแปลภาษา หรือต้องการใช้ Blockly ในโปรแกรมของคุณ สามารถเข้าไปได้ที่ %1", - "Apps.choiceIntro": "Blockly คือระบบการเขียนโปรแกรมด้วยภาพ ด้านล่างนี้คือตัวอย่างโปรแกรมประยุกต์ที่ใช้ Blockly", - "Apps.codeSubtitle": "เขียนโปรแกรมทั่วไป และสามารถแปลง Blockly ให้เป็นภาษา JavaScript, Python, Dart และ XML ได้", - "Plane.plane": "ระบบคำนวณที่นั่งบนเครื่องบิน", - "Apps.planeSubtitle": "แก้ปัญหาทางคณิตศาสตร์ด้วยการสร้างสูตรคำนวณที่มีหนึ่งหรือสองตัวแปร", - "Plane.rows": "%1 แถว", - "Plane.getRows": "จำนวนแถว (%1)", - "Plane.rows1": "ชั้นเฟิร์สคลาส %1 แถว", - "Plane.getRows1": "จำนวนแถวชั้นเฟิร์สคลาส (%1)", - "Plane.rows2": "ชั้นธุรกิจ %1 แถว", - "Plane.getRows2": "จำนวนแถวชั้นธุรกิจ (%1)", - "Plane.seats": "คำนวณได้ทั้งหมด %1 ที่นั่ง", - "Plane.placeholder": "?", - "Plane.setSeats": "จำนวนที่นั่ง =", - "Plane.description1": "ภายในเครื่องบินประกอบไปด้วยแถวของที่นั่งผู้โดยสาร ในแต่ละแถวจะมี 4 ที่นั่ง", - "Plane.description2": "ภายในเครื่องบินจะมีที่นั่งนักบินอยู่ 2 ที่ (สำหรับนักบิน และผู้ช่วยนักบิน) และมีแถวที่นั่งผู้โดยสารอยู่จำนวนหนึ่ง ในแต่ละแถวจะมี 4 ที่นั่ง", - "Plane.description3": "ภายในเครื่องบินจะมีที่นั่งนักบินอยู่ 2 ที่ (สำหรับนักบิน และผู้ช่วยนักบิน) และจะมีแถวที่นั่งสำหรับผู้โดยสาร \"ชั้นเฟิร์สคลาส\" และ \"ชั้นธุรกิจ\" อยู่จำนวนหนึ่ง โดยในชั้นเฟิร์สคลาสจะมีแถวละ 4 ที่นั่ง ส่วนในชั้นธุรกิจจะมีแถวละ 5 ที่นั่ง", - "Plane.instructions": "สร้างสูตรคำนวณ (ด้านล่าง) เพื่อคำนวณหาจำนวนที่นั่งทั้งหมดบนเครื่องบิน ตามจำนวนแถวที่เปลี่ยนไป (ด้านบน)" + "Code.trashTooltip": "ยกเลิกบล็อกทั้งหมด" } diff --git a/apps/json/tlh.json b/apps/json/tlh.json index fe6eee411..89ef0dc30 100644 --- a/apps/json/tlh.json +++ b/apps/json/tlh.json @@ -6,7 +6,7 @@ "messagedocumentation" : "qqq" }, "Apps.subtitle": "ngoq DaleghlaHbogh, ngogh DaghunlaHbogh", - "Apps.blocklyMessage": "ghunmeH ngogh", + "Blockly": "ghunmeH ngogh", "Apps.dialogOk": "ruch", "Apps.dialogCancel": "qIl", "Apps.catLogic": "meq", diff --git a/apps/json/tr.json b/apps/json/tr.json index a35120d86..ee222fef9 100644 --- a/apps/json/tr.json +++ b/apps/json/tr.json @@ -9,7 +9,7 @@ ] }, "Apps.subtitle": "görsel bir programlama ortamı", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Oluşturulan JavaScript kodunu görüntüle.", "Apps.linkTooltip": "Blokları ve bağlantı adresini kaydet.", "Apps.runTooltip": "Çalışma alanında bloklar tarafından tanımlanan programını çalıştırın.", @@ -37,24 +37,5 @@ "Code.discard": "Tüm %1 blok silinsin mi?", "Code.title": "Kod", "Code.blocks": "Bloklar", - "Code.trashTooltip": "Bütün blokları at.", - "Apps.indexTitle": "Blockly uygulamaları", - "Apps.indexFooter": "Blockly ücretsiz ve açık kaynaklıdır. Koda veya Blockly çevirilerine katkıda bulunmak, ya da kendi uygulamanızda Blockly'yi kullanmak için %1 sayfasını ziyaret edin.", - "Apps.choiceIntro": "Blockly grafiksel bir programlama ortamıdır. Blockly kullanan bazı örnek uygulamalar aşağıdadır.", - "Apps.codeSubtitle": "Bir Blockly programını JavaScript, Python, Dart ya da XML'e aktarın.", - "Plane.plane": "Uçak Koltuğu Hesaplayıcı", - "Apps.planeSubtitle": "Bir veya iki değişkenle bir matematik problemini çöz.", - "Plane.rows": "Sıralar: %1", - "Plane.getRows": "sıralar (%1)", - "Plane.rows1": "Birinci sınıf sıralar: (%1)", - "Plane.getRows1": "Birinci sınıf sıralar (%1)", - "Plane.rows2": "İkinci sınıf sıralar: %1", - "Plane.getRows2": "İkinci sınıf sıralar (%1)", - "Plane.seats": "Koltuklar: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "koltuklar =", - "Plane.description1": "Bir uçağın belirli sayıda koltuk sırası vardır. Her sıra dört koltuk içerir.", - "Plane.description2": "Bir uçağın uçuş güvertesinde iki koltuğu (pilot ve yardımcı pilot için), ve belirli sayıda koltuk sırası vardır. Her sıra dört koltuk içerir.", - "Plane.description3": "Bir uçağın uçuş güvertesinde iki koltuğu (pilot ve yardımcı pilot için), ve belirli sayıda birinci sınıf ve ikinci sınıf yolcu koltuğu sırası vardır. Her birinci sınıf sıra dört koltuk içerir. Her ikinci sınıf sıra beş koltuk içerir.", - "Plane.instructions": "Sıralar(üstte) değiştikçe uçaktaki toplam koltuk sayısını hesaplayan bir formül(altta) oluşturun." + "Code.trashTooltip": "Bütün blokları at." } diff --git a/apps/json/uk.json b/apps/json/uk.json index 98f1bff68..cb3bec736 100644 --- a/apps/json/uk.json +++ b/apps/json/uk.json @@ -5,7 +5,7 @@ ] }, "Apps.subtitle": "візуальне середовище програмування", - "Apps.blocklyMessage": "Blockly (Блоклі)", + "Blockly": "Blockly (Блоклі)", "Apps.codeTooltip": "Див. згенерований код JavaScript.", "Apps.linkTooltip": "Зберегти і пов'язати з блоками.", "Apps.runTooltip": "Запустіть програму, визначену блоками у робочій області.", @@ -33,24 +33,5 @@ "Code.discard": "Вилучити всі блоки %1?", "Code.title": "Код", "Code.blocks": "Блоки", - "Code.trashTooltip": "Відкинути всі блоки.", - "Apps.indexTitle": "Програми Blockly", - "Apps.indexFooter": "Блоклі - безкоштовне і відкрите програмне забезпечення. Щоб поділитися своїм кодом або перекладами Блоклі, щоб використовувати Блоклі для своїх додатків, завітайте %1.", - "Apps.choiceIntro": "Блоклі - це графічне середовище програмування. Нижче наведені приклади додатків, що використовують Блоклі.", - "Apps.codeSubtitle": "Експортувати Blockly програму на JavaScript, Python, Dart або XML.", - "Plane.plane": "Калькулятор місць у літаку", - "Apps.planeSubtitle": "Розв'язуйте математичну задачу з однією або двома змінними.", - "Plane.rows": "Рядки: %1", - "Plane.getRows": "рядки (%1)", - "Plane.rows1": "рядів 1-го класу: %1", - "Plane.getRows1": "рядів 1-го класу (%1)", - "Plane.rows2": "рядів 2-го класу: %1", - "Plane.getRows2": "рядів 2-го класу (%1)", - "Plane.seats": "Місць: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "місць=", - "Plane.description1": "Літак має кілька рядів пасажирських сидінь. Кожен ряд містить чотири місця.", - "Plane.description2": "Літак має два місця в кабіні екіпажу (пілот і другий пілот), і кілька рядів пасажирських сидінь. Кожен рядок містить чотири місця.", - "Plane.description3": "Літак має два місця в кабіні екіпажу (пілот і другий пілот), і кілька рядів 1-го класу 2-го класу пасажирських місць. Кожний ряд 1-го класу містить чотири місця. Кожен ряд 2-го класу містить п'ять місць.", - "Plane.instructions": "Побудувати формулу (нижче), яка обчислює кількість місць на літаку при зміні рядків (див. вище)." + "Code.trashTooltip": "Відкинути всі блоки." } diff --git a/apps/json/vi.json b/apps/json/vi.json index c32899c4f..3197571f1 100644 --- a/apps/json/vi.json +++ b/apps/json/vi.json @@ -8,7 +8,7 @@ ] }, "Apps.subtitle": "môi trường lập trình trực quan", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "Xem code đã tạo bằng JavaScript.", "Apps.linkTooltip": "Lưu và lấy địa chỉ liên kết.", "Apps.runTooltip": "Chạy chương trình.", @@ -36,24 +36,5 @@ "Code.discard": "Xóa hết %1 mảnh?", "Code.title": "Chương trình", "Code.blocks": "Các mảnh", - "Code.trashTooltip": "Xóa tất cả mọi mảnh.", - "Apps.indexTitle": "Ứng dụng Blockly", - "Apps.indexFooter": "Blockly là mã nguồn mở và miễn phí. Đóng góp mã hoặc bản dịch để Blockly, hoặc sử dụng Blockly trong ứng dụng của riêng bạn, truy cập vào %1.", - "Apps.choiceIntro": "Blockly là một môi trường lập trình đồ họa. Dưới đây là một số ứng dụng mẫu sử dụng Blockly.", - "Apps.codeSubtitle": "Xuất khẩu một chương trình Blockly vào JavaScript, Python, Dart hoặc XML.", - "Plane.plane": "Máy bay ghế máy tính", - "Apps.planeSubtitle": "Giải quyết một vấn đề toán học với một hoặc hai biến.", - "Plane.rows": "Số hàng ghế: %1", - "Plane.getRows": "đếm số hàng ghế (%1)", - "Plane.rows1": "Hàng hạng nhất: %1", - "Plane.getRows1": "số hàng hạng nhất (%1)", - "Plane.rows2": "Hàng hạng hai: %1", - "Plane.getRows2": "số hàng hạng hai (%1)", - "Plane.seats": "Số chỗ ngồi: %1", - "Plane.placeholder": "?", - "Plane.setSeats": "Tính số chỗ ngồi =", - "Plane.description1": "Máy bay có một số hàng ghế hành khách. Mỗi hàng có bốn chỗ ngồi.", - "Plane.description2": "Một máy bay có hai ghế trong buồng lái (dành cho phi công trưởng và phi công phụ), và một loạt hàng ghế cho hành khách. Mỗi hàng có bốn ghế (bốn chỗ ngồi).", - "Plane.description3": "Một chiếc máy bay này có hai chỗ ngồi ở sàn (cho phi công trưởng và phi công phó), và một số hàng ghế hạng 1 và hạng 2. Mỗi hàng hạng 1 có bốn chỗ ngồi. Mỗi hàng hạng 2 có năm chỗ ngồi.", - "Plane.instructions": "Dưới đây hãy tạo công thức tính số chỗ ngồi trên máy bay để nó thay đổi tùy theo số lượng hàng ghế (hình trên)." + "Code.trashTooltip": "Xóa tất cả mọi mảnh." } diff --git a/apps/json/zh-hans.json b/apps/json/zh-hans.json index c79d1d2f9..20258aba4 100644 --- a/apps/json/zh-hans.json +++ b/apps/json/zh-hans.json @@ -10,7 +10,7 @@ ] }, "Apps.subtitle": "一个可视化编程环境", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "查看生成的JavaScript代码。", "Apps.linkTooltip": "保存模块并生成链接。", "Apps.runTooltip": "于工作区中运行块所定义的程式。", @@ -38,24 +38,5 @@ "Code.discard": "删除所有%1块吗?", "Code.title": "代码", "Code.blocks": "块", - "Code.trashTooltip": "放弃所有块。", - "Apps.indexTitle": "Blockly应用程序", - "Apps.indexFooter": "Blockly是免费和开源的软件。若要贡献代码或翻译Blockly,或者在您自己的应用中使用Blockly,请查看%1。", - "Apps.choiceIntro": "Blockly是一个图形化的程序设计环境。下面是一些使用Blockly的应用示例。", - "Apps.codeSubtitle": "将Blockly程序导出为JavaScript、Python、Dart或XML。", - "Plane.plane": "飞机座位计算器", - "Apps.planeSubtitle": "解决与一个或两个变量的数学问题。", - "Plane.rows": "行:%1", - "Plane.getRows": "行 (%1)", - "Plane.rows1": "头等行:%1", - "Plane.getRows1": "头等行(%1)", - "Plane.rows2": "经济等行:%1", - "Plane.getRows2": "经济等行(%1)", - "Plane.seats": "座位:%1", - "Plane.placeholder": "?", - "Plane.setSeats": "座位=", - "Plane.description1": "一架飞机有一定量行数的乘客座位,每行共四座。", - "Plane.description2": "一架飞机除了有两个座位供正副驾驶员,还有一定量行数的乘客座位。每行共四座。", - "Plane.description3": "一架飞机除了有两个座位供正副驾驶员,还有一定量行数的头等及经济乘客座位。头等每行共四座,经济每行共五座。", - "Plane.instructions": "于下方写出一条公式以计算飞机上的座位总数。" + "Code.trashTooltip": "放弃所有块。" } diff --git a/apps/json/zh-hant.json b/apps/json/zh-hant.json index f72e12913..e7cb3cf12 100644 --- a/apps/json/zh-hant.json +++ b/apps/json/zh-hant.json @@ -6,7 +6,7 @@ ] }, "Apps.subtitle": "視覺化程式設計環境", - "Apps.blocklyMessage": "Blockly", + "Blockly": "Blockly", "Apps.codeTooltip": "查看產生的JavaScript程式碼。", "Apps.linkTooltip": "儲存積木組並提供連結。", "Apps.runTooltip": "於工作區中執行積木組所定義的程式。", @@ -34,24 +34,5 @@ "Code.discard": "刪除共%1個積木?", "Code.title": "程式碼", "Code.blocks": "積木", - "Code.trashTooltip": "捨棄所有積木。", - "Apps.indexTitle": "Blockly 應用程式", - "Apps.indexFooter": "Blockly 是自由和開放源始碼的軟體。若要貢獻代碼或翻譯到 Blockly,或在您自己的應用程式中使用 Blockly,請查看 %1。", - "Apps.choiceIntro": "Blockly 是一個圖形化的程式設計環境。下面是一些使用 Blockly 的應用範例。", - "Apps.codeSubtitle": "將 Blockly 程式匯出成 JavaScript、 Python 或 XML。", - "Plane.plane": "飛機座位計算器", - "Apps.planeSubtitle": "解決一個或兩個變數的數學問題。", - "Plane.rows": "排:%1", - "Plane.getRows": "排(%1)", - "Plane.rows1": "頭等艙:%1 排", - "Plane.getRows1": "頭等艙(%1)", - "Plane.rows2": "經濟艙:%1 排", - "Plane.getRows2": "經濟艙(%1)", - "Plane.seats": "座位:%1", - "Plane.placeholder": "?", - "Plane.setSeats": "座位=", - "Plane.description1": "一架飛機有一定量行數的乘客座位,每排都包含四個席位。", - "Plane.description2": "一架飛機除了有兩個座位供正副機師,還有一定量行數的乘客座位。每排都包含四個席位。", - "Plane.description3": "一架飛機除了有兩個座位供正副機師,還有一定量行數的頭等及經濟乘客座位。頭等艙每排都包含四個席位,經濟艙每排都包含五個席位。。", - "Plane.instructions": "於下方寫出一條公式以計算飛機上的座位總數。" + "Code.trashTooltip": "捨棄所有積木。" } diff --git a/apps/plane/generated/ace.js b/apps/plane/generated/ace.js deleted file mode 100644 index 0f4812981..000000000 --- a/apps/plane/generated/ace.js +++ /dev/null @@ -1,68 +0,0 @@ -// This file was automatically generated from common.soy. -// Please don't edit this file by hand. - -if (typeof apps == 'undefined') { var apps = {}; } - - -apps.messages = function(opt_data, opt_ignored, opt_ijData) { - return '

Ruweuëng meuprogram ban leumahTeutheunEu kode JavaScript yang geupeuhaséKeubah ngon neupawôt keu theunNeupeujak program nyang geupeuteutap le seuneutheun lam ruweuëng keurijaPeujak programAtô keulayiKa gotPeubateuëLogisKuwienMatematikHaraihDapeutaWareunaMeumacamProsedurNa masalah lam neumeulakèeNeubagi seuneutheun droëneuh ngon peunawôt nyoë: %1Meu\'ah, \'%1\' hana saban sakri ngon peuë mantong program nyang meukeubahBeureukaih keuneubah droëneuh han jeuët geupasoë. Kadang na neupeugot ngon versi seuneutheun yang la\'éndapeutaharaih
'; -}; - - -apps.dialog = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - - -apps.codeDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.storageDialog = function(opt_data, opt_ignored, opt_ijData) { - return '
' + apps.ok(null, null, opt_ijData) + '
'; -}; - - -apps.ok = function(opt_data, opt_ignored, opt_ijData) { - return '
'; -}; - -; -// This file was automatically generated from template.soy. -// Please don't edit this file by hand. - -if (typeof planepage == 'undefined') { var planepage = {}; } - - -planepage.messages = function(opt_data, opt_ignored, opt_ijData) { - return apps.messages(null, null, opt_ijData) + '
Rows: %1rows (%1)1st class rows: %11st class rows (%1)2nd class rows: %12nd class rows (%1)Seats: %1?seats =
'; -}; - - -planepage.start = function(opt_data, opt_ignored, opt_ijData) { - var output = planepage.messages(null, null, opt_ijData) + '

Teutheun : Peukakah Bileuëng Kurusi Kapai Teureubang.   '; - var iLimit130 = opt_ijData.maxLevel + 1; - for (var i130 = 1; i130 < iLimit130; i130++) { - output += ' ' + ((i130 == opt_ijData.level) ? '' + soy.$$escapeHtml(i130) + '' : (i130 < opt_ijData.level) ? '' : '' + soy.$$escapeHtml(i130) + ''); - } - output += '

\n'); - -Plane.MAX_LEVEL = 3; -Plane.LEVEL = BlocklyApps.getNumberParamFromUrl('level', 1, Plane.MAX_LEVEL); - - -Plane.rows1st = 0; -Plane.rows2nd = 0; - -/** - * Redraw the rows when the slider has moved. - * @param {number} value New slider position. - */ -Plane.sliderChange = function(value) { - var newRows = Math.round(value * 410 / 20); - Plane.redraw(newRows); -}; - -/** - * Change the text of a label. - * @param {string} id ID of element to change. - * @param {string} text New text. - */ -Plane.setText = function(id, text) { - var el = document.getElementById(id); - while (el.firstChild) { - el.removeChild(el.firstChild); - } - el.appendChild(document.createTextNode(text)); -}; - -/** - * Display a checkmark or cross next to the answer. - * @param {?boolean} ok True for checkmark, false for cross, null for nothing. - */ -Plane.setCorrect = function(ok) { - var yes = document.getElementById('seatYes'); - var no = document.getElementById('seatNo'); - yes.style.display = 'none'; - no.style.display = 'none'; - if (ok === true) { - yes.style.display = 'block'; - } else if (ok === false) { - no.style.display = 'block'; - } -}; - -/** - * Initialize Blockly and the SVG plane. - */ -Plane.init = function() { - BlocklyApps.init(); - - var rtl = BlocklyApps.isRtl(); - var toolbox = document.getElementById('toolbox'); - Blockly.inject(document.getElementById('blockly'), - {media: '../../media/', - rtl: rtl, - toolbox: toolbox}); - - var defaultXml = - '' + - ' ' + - ' ' + - ''; - BlocklyApps.loadBlocks(defaultXml); - - Blockly.addChangeListener(Plane.recalculate); - - //window.onbeforeunload = function() { - // return 'Leaving this page will result in the loss of your work.'; - //}; - - // Initialize the slider. - var svg = document.getElementById('plane'); - Plane.rowSlider = new Slider(60, 330, 425, svg, Plane.sliderChange); - Plane.rowSlider.setValue(0.225); - - // Draw five 1st class rows. - Plane.redraw(5); -}; - -window.addEventListener('load', Plane.init); - -/** - * Use the blocks to calculate the number of seats. - * Display the calculated number. - */ -Plane.recalculate = function() { - // Find the 'set' block and use it as the formula root. - var rootBlock = null; - var blocks = Blockly.mainWorkspace.getTopBlocks(false); - for (var i = 0, block; block = blocks[i]; i++) { - if (block.type == 'plane_set_seats') { - rootBlock = block; - } - } - var seats = NaN; - Blockly.JavaScript.init(); - var code = Blockly.JavaScript.blockToCode(rootBlock); - try { - seats = eval(code); - } catch (e) { - // Allow seats to remain NaN. - } - Plane.setText('seatText', - BlocklyApps.getMsg('Plane_seats').replace( - '%1', isNaN(seats) ? '?' : seats)); - Plane.setCorrect(isNaN(seats) ? null : (Plane.answer() == seats)); - - // Update blocks to show values. - function updateBlocks(blocks) { - for (var i = 0, block; block = blocks[i]; i++) { - block.customUpdate && block.customUpdate(); - } - } - updateBlocks(Blockly.mainWorkspace.getAllBlocks()); - updateBlocks(Blockly.mainWorkspace.flyout_.workspace_.getAllBlocks()); -}; - -/** - * Calculate the correct answer. - * @return {number} Number of seats. - */ -Plane.answer = function() { - if (Plane.LEVEL == 1) { - return Plane.rows1st * 4; - } else if (Plane.LEVEL == 2) { - return 2 + (Plane.rows1st * 4); - } else if (Plane.LEVEL == 3) { - return 2 + (Plane.rows1st * 4) + (Plane.rows2nd * 5); - } - throw 'Unknown level.'; -}; - -/** - * Redraw the SVG to show a new number of rows. - * @param {number} newRows - */ -Plane.redraw = function(newRows) { - var rows1st = Plane.rows1st; - var rows2nd = Plane.rows2nd; - var svg = document.getElementById('plane'); - if (newRows != rows1st) { - while (newRows < rows1st) { - var row = document.getElementById('row1st' + rows1st); - row.parentNode.removeChild(row); - rows1st--; - } - while (newRows > rows1st) { - rows1st++; - var row = document.createElementNS('http://www.w3.org/2000/svg', - 'use'); - row.setAttribute('id', 'row1st' + rows1st); - // Row of 4 seats. - row.setAttribute('x', (rows1st - 1) * 20); - row.setAttributeNS('http://www.w3.org/1999/xlink', - 'xlink:href', '#row1st'); - svg.appendChild(row); - } - - if (Plane.LEVEL == 3) { - newRows = Math.floor((21 - newRows) * 1.11); - while (newRows < rows2nd) { - var row = document.getElementById('row2nd' + rows2nd); - row.parentNode.removeChild(row); - rows2nd--; - } - while (newRows > rows2nd) { - rows2nd++; - var row = document.createElementNS('http://www.w3.org/2000/svg', - 'use'); - row.setAttribute('id', 'row2nd' + rows2nd); - row.setAttribute('x', 400 - (rows2nd - 1) * 18); - row.setAttributeNS('http://www.w3.org/1999/xlink', - 'xlink:href', '#row2nd'); - svg.appendChild(row); - } - } - - if (Plane.LEVEL < 3) { - Plane.setText('row1stText', - BlocklyApps.getMsg('Plane_rows').replace('%1', rows1st)); - } else { - Plane.setText('row1stText', - BlocklyApps.getMsg('Plane_rows1').replace('%1', rows1st)); - Plane.setText('row2ndText', - BlocklyApps.getMsg('Plane_rows2').replace('%1', rows2nd)); - } - - Plane.rows1st = rows1st; - Plane.rows2nd = rows2nd; - Plane.recalculate(); - } -}; diff --git a/demos/blockfactory/blocks.js b/demos/blockfactory/blocks.js index 039be5366..bd70ed864 100644 --- a/demos/blockfactory/blocks.js +++ b/demos/blockfactory/blocks.js @@ -1,5 +1,5 @@ /** - * Blockly Apps: Block Factory Blocks + * Blockly Demos: Block Factory Blocks * * Copyright 2012 Google Inc. * https://developers.google.com/blockly/ diff --git a/demos/blockfactory/factory.js b/demos/blockfactory/factory.js index 4d7d2379f..2e16572be 100644 --- a/demos/blockfactory/factory.js +++ b/demos/blockfactory/factory.js @@ -1,5 +1,5 @@ /** - * Blockly Apps: Block Factory + * Blockly Demos: Block Factory * * Copyright 2012 Google Inc. * https://developers.google.com/blockly/ diff --git a/demos/blockfactory/index.html b/demos/blockfactory/index.html index 8e04ed09f..9690d4e07 100644 --- a/demos/blockfactory/index.html +++ b/demos/blockfactory/index.html @@ -27,9 +27,6 @@ margin-top: 5px; margin-bottom: 0; } - a:hover { - color: #f00; - } table { height: 100%; width: 100%; diff --git a/demos/blockfactory/preview.js b/demos/blockfactory/preview.js index d1831f776..fed0788fd 100644 --- a/demos/blockfactory/preview.js +++ b/demos/blockfactory/preview.js @@ -1,5 +1,5 @@ /** - * Blockly Apps: Block Factory + * Blockly Demos: Block Factory * * Copyright 2013 Google Inc. * https://developers.google.com/blockly/ diff --git a/demos/index.html b/demos/index.html index 19a94ffa2..9bcde075f 100644 --- a/demos/index.html +++ b/demos/index.html @@ -9,19 +9,16 @@ background-color: #fff; font-family: sans-serif; } + h1 { + font-weight: normal; + font-size: 140%; + } td { padding: 1ex; } img { border: none; } - h1 { - font-weight: normal; - font-size: 140%; - } - a:hover { - color: #f00; - } @@ -127,6 +124,18 @@ + + + + + + + +
Plane
+
Closure Templates to support 35 languages.
+ + + diff --git a/demos/plane/README.txt b/demos/plane/README.txt new file mode 100644 index 000000000..8a2134ea5 --- /dev/null +++ b/demos/plane/README.txt @@ -0,0 +1,28 @@ +This Blockly demo uses Closure Templates to create a multilingual application. +Any changes to the template.soy file require a recompile. Here is the command +to generate a quick English version for debugging: + +java -jar soy/SoyToJsSrcCompiler.jar --outputPathFormat generated/en.js --srcs template.soy + +To generate a full set of language translations, first extract all the strings +from template.soy using this command: + +java -jar soy/SoyMsgExtractor.jar --outputFile xlf/extracted_msgs.xlf template.soy + +This generates xlf/extracted_msgs.xlf, which may then be used by any +XLIFF-compatible translation console to generate a set of files with the +translated strings. These should be placed in the xlf directory. + +Finally, generate all the language versions wih this command: + +java -jar soy/SoyToJsSrcCompiler.jar --locales ar,be-tarask,br,ca,da,de,el,en,es,fa,fr,gl,he,hrx,hu,ia,is,it,ja,ko,lv,mk,ms,nb,nl,pl,pms,pt-br,ro,ru,sc,sco,sk,sv,th,tr,uk,vi,zh-hans,zh-hant --messageFilePathFormat xlf/translated_msgs_{LOCALE}.xlf --outputPathFormat 'generated/{LOCALE}.js' template.soy + + +This is the process that Google uses for maintaining Blockly Games in 40+ +languages. The XLIFF fromat is simple enough that it is trival to write a +Python script to reformat it into some other format (such as JSON) for +compatability with other translation consoles. + + +For more information, see message translation for Closure Templates: +https://developers.google.com/closure/templates/docs/translation diff --git a/apps/plane/blocks.js b/demos/plane/blocks.js similarity index 82% rename from apps/plane/blocks.js rename to demos/plane/blocks.js index db8dc03cc..ea7cdc5cb 100644 --- a/apps/plane/blocks.js +++ b/demos/plane/blocks.js @@ -1,5 +1,5 @@ /** - * Blockly Apps: Plane Seat Calculator Blocks + * Blockly Demos: Plane Seat Calculator Blocks * * Copyright 2013 Google Inc. * https://developers.google.com/blockly/ @@ -29,7 +29,7 @@ Blockly.Blocks['plane_set_seats'] = { this.setHelpUrl(Blockly.Msg.VARIABLES_SET_HELPURL); this.setColour(330); this.appendValueInput('VALUE') - .appendField(BlocklyApps.getMsg('Plane_setSeats')); + .appendField(Plane.getMsg('Plane_setSeats')); this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP); } }; @@ -47,13 +47,12 @@ Blockly.Blocks['plane_get_rows'] = { this.setHelpUrl(Blockly.Msg.VARIABLES_GET_HELPURL); this.setColour(330); this.appendDummyInput() - .appendField(BlocklyApps.getMsg('Plane_getRows'), 'title'); + .appendField(Plane.getMsg('Plane_getRows'), 'title'); this.setOutput(true, 'Number'); }, customUpdate: function() { this.setFieldValue( - BlocklyApps.getMsg('Plane_getRows').replace('%1', Plane.rows1st), - 'title'); + Plane.getMsg('Plane_getRows').replace('%1', Plane.rows1st), 'title'); } }; @@ -68,13 +67,12 @@ Blockly.Blocks['plane_get_rows1st'] = { this.setHelpUrl(Blockly.Msg.VARIABLES_GET_HELPURL); this.setColour(330); this.appendDummyInput() - .appendField(BlocklyApps.getMsg('Plane_getRows1'), 'title'); + .appendField(Plane.getMsg('Plane_getRows1'), 'title'); this.setOutput(true, 'Number'); }, customUpdate: function() { this.setFieldValue( - BlocklyApps.getMsg('Plane_getRows1').replace('%1', Plane.rows1st), - 'title'); + Plane.getMsg('Plane_getRows1').replace('%1', Plane.rows1st), 'title'); } }; @@ -89,13 +87,12 @@ Blockly.Blocks['plane_get_rows2nd'] = { this.setHelpUrl(Blockly.Msg.VARIABLES_GET_HELPURL); this.setColour(330); this.appendDummyInput() - .appendField(BlocklyApps.getMsg('Plane_getRows2'), 'title'); + .appendField(Plane.getMsg('Plane_getRows2'), 'title'); this.setOutput(true, 'Number'); }, customUpdate: function() { this.setFieldValue( - BlocklyApps.getMsg('Plane_getRows2').replace('%1', Plane.rows2nd), - 'title'); + Plane.getMsg('Plane_getRows2').replace('%1', Plane.rows2nd), 'title'); } }; diff --git a/demos/plane/generated/ar.js b/demos/plane/generated/ar.js new file mode 100644 index 000000000..f9021b56f --- /dev/null +++ b/demos/plane/generated/ar.js @@ -0,0 +1,37 @@ +// This file was automatically generated from template.soy. +// Please don't edit this file by hand. + +if (typeof planepage == 'undefined') { var planepage = {}; } + + +planepage.messages = function(opt_data, opt_ignored, opt_ijData) { + return '
الصفوف: %1الصفوف (%1)صفوف الطبقة الأولى: %1صفوف الطبقة الأولى (%1)صفوف الفئة الثانية: %1صفوف الفئة الثانية: (%1)المقاعد: %1؟المقاعد =
'; +}; + + +planepage.start = function(opt_data, opt_ignored, opt_ijData) { + var output = planepage.messages(null, null, opt_ijData) + '

Blockly > Demos > آلة حاسبة لمقعد الطائرة   '; + var iLimit37 = opt_ijData.maxLevel + 1; + for (var i37 = 1; i37 < iLimit37; i37++) { + output += ' ' + ((i37 == opt_ijData.level) ? '' + soy.$$escapeHtml(i37) + '' : (i37 < opt_ijData.level) ? '' : '' + soy.$$escapeHtml(i37) + ''); + } + output += '

- + diff --git a/demos/plane/plane.js b/demos/plane/plane.js new file mode 100644 index 000000000..8beda12c1 --- /dev/null +++ b/demos/plane/plane.js @@ -0,0 +1,439 @@ +/** + * Blockly Demos: Plane Seat Calculator + * + * Copyright 2012 Google Inc. + * https://developers.google.com/blockly/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview JavaScript for Blockly's Plane Seat Calculator application. + * @author fraser@google.com (Neil Fraser) + */ +'use strict'; + +/** + * Create a namespace for the application. + */ +var Plane = {}; + +/** + * Lookup for names of supported languages. Keys should be in ISO 639 format. + */ +Plane.LANGUAGE_NAME = { + 'ar': 'العربية', + 'be-tarask': 'Taraškievica', + 'br': 'Brezhoneg', + 'ca': 'Català', + 'da': 'Dansk', + 'de': 'Deutsch', + 'el': 'Ελληνικά', + 'en': 'English', + 'es': 'Español', + 'fa': 'فارسی', + 'fr': 'Français', + 'he': 'עברית', + 'hrx': 'Hunsrik', + 'hu': 'Magyar', + 'ia': 'Interlingua', + 'is': 'Íslenska', + 'it': 'Italiano', + 'ja': '日本語', + 'ko': '한국어', + 'ms': 'Bahasa Melayu', + 'nb': 'Norsk Bokmål', + 'nl': 'Nederlands, Vlaams', + 'pl': 'Polski', + 'pms': 'Piemontèis', + 'pt-br': 'Português Brasileiro', + 'ro': 'Română', + 'ru': 'Русский', + 'sc': 'Sardu', + 'sv': 'Svenska', + 'th': 'ภาษาไทย', + 'tr': 'Türkçe', + 'uk': 'Українська', + 'vi': 'Tiếng Việt', + 'zh-hans': '簡體中文', + 'zh-hant': '正體中文' +}; + +/** + * List of RTL languages. + */ +Plane.LANGUAGE_RTL = ['ar', 'fa', 'he']; + +/** + * Extracts a parameter from the URL. + * If the parameter is absent default_value is returned. + * @param {string} name The name of the parameter. + * @param {string} defaultValue Value to return if paramater not found. + * @return {string} The parameter value or the default value if not found. + */ +Plane.getStringParamFromUrl = function(name, defaultValue) { + var val = location.search.match(new RegExp('[?&]' + name + '=([^&]+)')); + return val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : defaultValue; +}; + +/** + * Extracts a numeric parameter from the URL. + * If the parameter is absent or less than min_value, min_value is + * returned. If it is greater than max_value, max_value is returned. + * @param {string} name The name of the parameter. + * @param {number} minValue The minimum legal value. + * @param {number} maxValue The maximum legal value. + * @return {number} A number in the range [min_value, max_value]. + */ +Plane.getNumberParamFromUrl = function(name, minValue, maxValue) { + var val = Number(Plane.getStringParamFromUrl(name, 'NaN')); + return isNaN(val) ? minValue : Math.min(Math.max(minValue, val), maxValue); +}; + +/** + * Get the language of this user from the URL. + * @return {string} User's language. + */ +Plane.getLang = function() { + var lang = Plane.getStringParamFromUrl('lang', ''); + if (Plane.LANGUAGE_NAME[lang] === undefined) { + // Default to English. + lang = 'en'; + } + return lang; +}; + +/** + * Is the current language (Plane.LANG) an RTL language? + * @return {boolean} True if RTL, false if LTR. + */ +Plane.isRtl = function() { + return Plane.LANGUAGE_RTL.indexOf(Plane.LANG) != -1; +}; + +/** + * Load blocks saved in session/local storage. + * @param {string} defaultXml Text representation of default blocks. + */ +Plane.loadBlocks = function(defaultXml) { + try { + var loadOnce = window.sessionStorage.loadOnceBlocks; + } catch(e) { + // Firefox sometimes throws a SecurityError when accessing sessionStorage. + // Restarting Firefox fixes this, so it looks like a bug. + var loadOnce = null; + } + if (loadOnce) { + // Language switching stores the blocks during the reload. + delete window.sessionStorage.loadOnceBlocks; + var xml = Blockly.Xml.textToDom(loadOnce); + Blockly.Xml.domToWorkspace(Blockly.mainWorkspace, xml); + } else if (defaultXml) { + // Load the editor with default starting blocks. + var xml = Blockly.Xml.textToDom(defaultXml); + Blockly.Xml.domToWorkspace(Blockly.mainWorkspace, xml); + } +}; + +/** + * Save the blocks and reload with a different language. + */ +Plane.changeLanguage = function() { + // Store the blocks for the duration of the reload. + // This should be skipped for the index page, which has no blocks and does + // not load Blockly. + // MSIE 11 does not support sessionStorage on file:// URLs. + if (typeof Blockly != 'undefined' && window.sessionStorage) { + var xml = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); + var text = Blockly.Xml.domToText(xml); + window.sessionStorage.loadOnceBlocks = text; + } + + var languageMenu = document.getElementById('languageMenu'); + var newLang = encodeURIComponent( + languageMenu.options[languageMenu.selectedIndex].value); + var search = window.location.search; + if (search.length <= 1) { + search = '?lang=' + newLang; + } else if (search.match(/[?&]lang=[^&]*/)) { + search = search.replace(/([?&]lang=)[^&]*/, '$1' + newLang); + } else { + search = search.replace(/\?/, '?lang=' + newLang + '&'); + } + + window.location = window.location.protocol + '//' + + window.location.host + window.location.pathname + search; +}; + +/** + * Gets the message with the given key from the document. + * @param {string} key The key of the document element. + * @return {string} The textContent of the specified element, + * or an error message if the element was not found. + */ +Plane.getMsg = function(key) { + var element = document.getElementById(key); + if (element) { + var text = element.textContent; + // Convert newline sequences. + text = text.replace(/\\n/g, '\n'); + return text; + } else { + return '[Unknown message: ' + key + ']'; + } +}; + +/** + * User's language (e.g. "en"). + * @type string + */ +Plane.LANG = Plane.getLang(); + +Plane.MAX_LEVEL = 3; +Plane.LEVEL = Plane.getNumberParamFromUrl('level', 1, Plane.MAX_LEVEL); + +Plane.rows1st = 0; +Plane.rows2nd = 0; + +/** + * Redraw the rows when the slider has moved. + * @param {number} value New slider position. + */ +Plane.sliderChange = function(value) { + var newRows = Math.round(value * 410 / 20); + Plane.redraw(newRows); +}; + +/** + * Change the text of a label. + * @param {string} id ID of element to change. + * @param {string} text New text. + */ +Plane.setText = function(id, text) { + var el = document.getElementById(id); + while (el.firstChild) { + el.removeChild(el.firstChild); + } + el.appendChild(document.createTextNode(text)); +}; + +/** + * Display a checkmark or cross next to the answer. + * @param {?boolean} ok True for checkmark, false for cross, null for nothing. + */ +Plane.setCorrect = function(ok) { + var yes = document.getElementById('seatYes'); + var no = document.getElementById('seatNo'); + yes.style.display = 'none'; + no.style.display = 'none'; + if (ok === true) { + yes.style.display = 'block'; + } else if (ok === false) { + no.style.display = 'block'; + } +}; + +/** + * Initialize Blockly and the SVG plane. + */ +Plane.init = function() { + Plane.initLanguage(); + + // Fixes viewport for small screens. + var viewport = document.querySelector('meta[name="viewport"]'); + if (viewport && screen.availWidth < 725) { + viewport.setAttribute('content', + 'width=725, initial-scale=.35, user-scalable=no'); + } + + Blockly.inject(document.getElementById('blockly'), + {media: '../../media/', + rtl: Plane.isRtl(), + toolbox: document.getElementById('toolbox')}); + + var defaultXml = + '' + + ' ' + + ' ' + + ''; + Plane.loadBlocks(defaultXml); + + Blockly.addChangeListener(Plane.recalculate); + + // Initialize the slider. + var svg = document.getElementById('plane'); + Plane.rowSlider = new Slider(60, 330, 425, svg, Plane.sliderChange); + Plane.rowSlider.setValue(0.225); + + // Draw five 1st class rows. + Plane.redraw(5); +}; + +/** + * Initialize the page language. + */ +Plane.initLanguage = function() { + // Set the page title with the content of the H1 title. + document.title += ' ' + document.getElementById('title').textContent; + + // Set the HTML's language and direction. + // document.dir fails in Mozilla, use document.body.parentNode.dir instead. + // https://bugzilla.mozilla.org/show_bug.cgi?id=151407 + var rtl = Plane.isRtl(); + document.head.parentElement.setAttribute('dir', rtl ? 'rtl' : 'ltr'); + document.head.parentElement.setAttribute('lang', Plane.LANG); + + // Sort languages alphabetically. + var languages = []; + for (var lang in Plane.LANGUAGE_NAME) { + languages.push([Plane.LANGUAGE_NAME[lang], lang]); + } + var comp = function(a, b) { + // Sort based on first argument ('English', 'Русский', '简体字', etc). + if (a[0] > b[0]) return 1; + if (a[0] < b[0]) return -1; + return 0; + }; + languages.sort(comp); + // Populate the language selection menu. + var languageMenu = document.getElementById('languageMenu'); + languageMenu.options.length = 0; + for (var i = 0; i < languages.length; i++) { + var tuple = languages[i]; + var lang = tuple[tuple.length - 1]; + var option = new Option(tuple[0], lang); + if (lang == Plane.LANG) { + option.selected = true; + } + languageMenu.options.add(option); + } + languageMenu.addEventListener('change', Plane.changeLanguage, true); +}; + +/** + * Use the blocks to calculate the number of seats. + * Display the calculated number. + */ +Plane.recalculate = function() { + // Find the 'set' block and use it as the formula root. + var rootBlock = null; + var blocks = Blockly.mainWorkspace.getTopBlocks(false); + for (var i = 0, block; block = blocks[i]; i++) { + if (block.type == 'plane_set_seats') { + rootBlock = block; + } + } + var seats = NaN; + Blockly.JavaScript.init(); + var code = Blockly.JavaScript.blockToCode(rootBlock); + try { + seats = eval(code); + } catch (e) { + // Allow seats to remain NaN. + } + Plane.setText('seatText', + Plane.getMsg('Plane_seats').replace( + '%1', isNaN(seats) ? '?' : seats)); + Plane.setCorrect(isNaN(seats) ? null : (Plane.answer() == seats)); + + // Update blocks to show values. + function updateBlocks(blocks) { + for (var i = 0, block; block = blocks[i]; i++) { + block.customUpdate && block.customUpdate(); + } + } + updateBlocks(Blockly.mainWorkspace.getAllBlocks()); + updateBlocks(Blockly.mainWorkspace.flyout_.workspace_.getAllBlocks()); +}; + +/** + * Calculate the correct answer. + * @return {number} Number of seats. + */ +Plane.answer = function() { + if (Plane.LEVEL == 1) { + return Plane.rows1st * 4; + } else if (Plane.LEVEL == 2) { + return 2 + (Plane.rows1st * 4); + } else if (Plane.LEVEL == 3) { + return 2 + (Plane.rows1st * 4) + (Plane.rows2nd * 5); + } + throw 'Unknown level.'; +}; + +/** + * Redraw the SVG to show a new number of rows. + * @param {number} newRows + */ +Plane.redraw = function(newRows) { + var rows1st = Plane.rows1st; + var rows2nd = Plane.rows2nd; + var svg = document.getElementById('plane'); + if (newRows != rows1st) { + while (newRows < rows1st) { + var row = document.getElementById('row1st' + rows1st); + row.parentNode.removeChild(row); + rows1st--; + } + while (newRows > rows1st) { + rows1st++; + var row = document.createElementNS('http://www.w3.org/2000/svg', + 'use'); + row.setAttribute('id', 'row1st' + rows1st); + // Row of 4 seats. + row.setAttribute('x', (rows1st - 1) * 20); + row.setAttributeNS('http://www.w3.org/1999/xlink', + 'xlink:href', '#row1st'); + svg.appendChild(row); + } + + if (Plane.LEVEL == 3) { + newRows = Math.floor((21 - newRows) * 1.11); + while (newRows < rows2nd) { + var row = document.getElementById('row2nd' + rows2nd); + row.parentNode.removeChild(row); + rows2nd--; + } + while (newRows > rows2nd) { + rows2nd++; + var row = document.createElementNS('http://www.w3.org/2000/svg', + 'use'); + row.setAttribute('id', 'row2nd' + rows2nd); + row.setAttribute('x', 400 - (rows2nd - 1) * 18); + row.setAttributeNS('http://www.w3.org/1999/xlink', + 'xlink:href', '#row2nd'); + svg.appendChild(row); + } + } + + if (Plane.LEVEL < 3) { + Plane.setText('row1stText', + Plane.getMsg('Plane_rows').replace('%1', rows1st)); + } else { + Plane.setText('row1stText', + Plane.getMsg('Plane_rows1').replace('%1', rows1st)); + Plane.setText('row2ndText', + Plane.getMsg('Plane_rows2').replace('%1', rows2nd)); + } + + Plane.rows1st = rows1st; + Plane.rows2nd = rows2nd; + Plane.recalculate(); + } +}; + +window.addEventListener('load', Plane.init); + +// Load the user's language pack. +document.write('\n'); diff --git a/apps/slider.js b/demos/plane/slider.js similarity index 99% rename from apps/slider.js rename to demos/plane/slider.js index 64ad65877..7fa949c2c 100644 --- a/apps/slider.js +++ b/demos/plane/slider.js @@ -1,5 +1,5 @@ /** - * Blockly Apps: SVG Slider + * Blockly Demos: SVG Slider * * Copyright 2012 Google Inc. * https://developers.google.com/blockly/ diff --git a/demos/plane/soy/COPYING b/demos/plane/soy/COPYING new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/demos/plane/soy/COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/demos/plane/soy/README b/demos/plane/soy/README new file mode 100644 index 000000000..e3447f2d8 --- /dev/null +++ b/demos/plane/soy/README @@ -0,0 +1,45 @@ +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +Contents: + ++ SoyToJsSrcCompiler.jar + Executable jar that compiles template files into JavaScript files. + ++ SoyMsgExtractor.jar + Executable jar that extracts messages from template files into XLF files. + ++ soyutils.js + Helper utilities required by all JavaScript code that SoyToJsSrcCompiler + generates. Equivalent functionality to soyutils_usegoog.js, but this + version does not need Closure Library. + + +Instructions: + ++ A simple Hello World for JavaScript: + http://code.google.com/closure/templates/docs/helloworld_js.html + ++ Complete documentation: + http://code.google.com/closure/templates/ + ++ Closure Templates project on Google Code: + http://code.google.com/p/closure-templates/ + + +Notes: + ++ Closure Templates requires Java 6 or higher: + http://www.java.com/ diff --git a/demos/plane/soy/SoyMsgExtractor.jar b/demos/plane/soy/SoyMsgExtractor.jar new file mode 100644 index 000000000..d7d261984 Binary files /dev/null and b/demos/plane/soy/SoyMsgExtractor.jar differ diff --git a/demos/plane/soy/SoyToJsSrcCompiler.jar b/demos/plane/soy/SoyToJsSrcCompiler.jar new file mode 100644 index 000000000..540a0702a Binary files /dev/null and b/demos/plane/soy/SoyToJsSrcCompiler.jar differ diff --git a/demos/plane/soy/soyutils.js b/demos/plane/soy/soyutils.js new file mode 100644 index 000000000..bde8e4133 --- /dev/null +++ b/demos/plane/soy/soyutils.js @@ -0,0 +1,2767 @@ +/* + * Copyright 2008 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview + * Utility functions and classes for Soy. + * + *

+ * The top portion of this file contains utilities for Soy users:

+ * + *

+ * The bottom portion of this file contains utilities that should only be called + * by Soy-generated JS code. Please do not use these functions directly from + * your hand-writen code. Their names all start with '$$'. + * + * @author Garrett Boyer + * @author Mike Samuel + * @author Kai Huang + * @author Aharon Lanin + */ + + +// COPIED FROM nogoog_shim.js + +// Create closure namespaces. +var goog = goog || {}; + + +goog.DEBUG = false; + + +goog.inherits = function(childCtor, parentCtor) { + /** @constructor */ + function tempCtor() {} + tempCtor.prototype = parentCtor.prototype; + childCtor.superClass_ = parentCtor.prototype; + childCtor.prototype = new tempCtor(); + childCtor.prototype.constructor = childCtor; +}; + + +// Just enough browser detection for this file. +if (!goog.userAgent) { + goog.userAgent = (function() { + var userAgent = ""; + if ("undefined" !== typeof navigator && navigator + && "string" == typeof navigator.userAgent) { + userAgent = navigator.userAgent; + } + var isOpera = userAgent.indexOf('Opera') == 0; + return { + jscript: { + /** + * @type {boolean} + */ + HAS_JSCRIPT: 'ScriptEngine' in this + }, + /** + * @type {boolean} + */ + OPERA: isOpera, + /** + * @type {boolean} + */ + IE: !isOpera && userAgent.indexOf('MSIE') != -1, + /** + * @type {boolean} + */ + WEBKIT: !isOpera && userAgent.indexOf('WebKit') != -1 + }; + })(); +} + +if (!goog.asserts) { + goog.asserts = { + /** + * @param {*} condition Condition to check. + */ + assert: function (condition) { + if (!condition) { + throw Error('Assertion error'); + } + }, + /** + * @param {...*} var_args + */ + fail: function (var_args) {} + }; +} + + +// Stub out the document wrapper used by renderAs*. +if (!goog.dom) { + goog.dom = {}; + /** + * @param {Document=} d + * @constructor + */ + goog.dom.DomHelper = function(d) { + this.document_ = d || document; + }; + /** + * @return {!Document} + */ + goog.dom.DomHelper.prototype.getDocument = function() { + return this.document_; + }; + /** + * Creates a new element. + * @param {string} name Tag name. + * @return {!Element} + */ + goog.dom.DomHelper.prototype.createElement = function(name) { + return this.document_.createElement(name); + }; + /** + * Creates a new document fragment. + * @return {!DocumentFragment} + */ + goog.dom.DomHelper.prototype.createDocumentFragment = function() { + return this.document_.createDocumentFragment(); + }; +} + + +if (!goog.format) { + goog.format = { + insertWordBreaks: function(str, maxCharsBetweenWordBreaks) { + str = String(str); + + var resultArr = []; + var resultArrLen = 0; + + // These variables keep track of important state inside str. + var isInTag = false; // whether we're inside an HTML tag + var isMaybeInEntity = false; // whether we might be inside an HTML entity + var numCharsWithoutBreak = 0; // number of chars since last word break + var flushIndex = 0; // index of first char not yet flushed to resultArr + + for (var i = 0, n = str.length; i < n; ++i) { + var charCode = str.charCodeAt(i); + + // If hit maxCharsBetweenWordBreaks, and not space next, then add . + if (numCharsWithoutBreak >= maxCharsBetweenWordBreaks && + // space + charCode != 32) { + resultArr[resultArrLen++] = str.substring(flushIndex, i); + flushIndex = i; + resultArr[resultArrLen++] = goog.format.WORD_BREAK; + numCharsWithoutBreak = 0; + } + + if (isInTag) { + // If inside an HTML tag and we see '>', it's the end of the tag. + if (charCode == 62) { + isInTag = false; + } + + } else if (isMaybeInEntity) { + switch (charCode) { + // Inside an entity, a ';' is the end of the entity. + // The entity that just ended counts as one char, so increment + // numCharsWithoutBreak. + case 59: // ';' + isMaybeInEntity = false; + ++numCharsWithoutBreak; + break; + // If maybe inside an entity and we see '<', we weren't actually in + // an entity. But now we're inside and HTML tag. + case 60: // '<' + isMaybeInEntity = false; + isInTag = true; + break; + // If maybe inside an entity and we see ' ', we weren't actually in + // an entity. Just correct the state and reset the + // numCharsWithoutBreak since we just saw a space. + case 32: // ' ' + isMaybeInEntity = false; + numCharsWithoutBreak = 0; + break; + } + + } else { // !isInTag && !isInEntity + switch (charCode) { + // When not within a tag or an entity and we see '<', we're now + // inside an HTML tag. + case 60: // '<' + isInTag = true; + break; + // When not within a tag or an entity and we see '&', we might be + // inside an entity. + case 38: // '&' + isMaybeInEntity = true; + break; + // When we see a space, reset the numCharsWithoutBreak count. + case 32: // ' ' + numCharsWithoutBreak = 0; + break; + // When we see a non-space, increment the numCharsWithoutBreak. + default: + ++numCharsWithoutBreak; + break; + } + } + } + + // Flush the remaining chars at the end of the string. + resultArr[resultArrLen++] = str.substring(flushIndex); + + return resultArr.join(''); + }, + /** + * String inserted as a word break by insertWordBreaks(). Safari requires + * , Opera needs the 'shy' entity, though this will give a + * visible hyphen at breaks. Other browsers just use . + * @type {string} + * @private + */ + WORD_BREAK: goog.userAgent.WEBKIT + ? '' : goog.userAgent.OPERA ? '­' : '' + }; +} + + +if (!goog.i18n) { + goog.i18n = { + bidi: { + /** + * Check the directionality of a piece of text, return true if the piece + * of text should be laid out in RTL direction. + * @param {string} text The piece of text that need to be detected. + * @param {boolean=} opt_isHtml Whether {@code text} is HTML/HTML-escaped. + * Default: false. + * @return {boolean} + * @private + */ + detectRtlDirectionality: function(text, opt_isHtml) { + text = soyshim.$$bidiStripHtmlIfNecessary_(text, opt_isHtml); + return soyshim.$$bidiRtlWordRatio_(text) + > soyshim.$$bidiRtlDetectionThreshold_; + } + } + }; +} + +/** + * Directionality enum. + * @enum {number} + */ +goog.i18n.bidi.Dir = { + RTL: -1, + UNKNOWN: 0, + LTR: 1 +}; + + +/** + * Convert a directionality given in various formats to a goog.i18n.bidi.Dir + * constant. Useful for interaction with different standards of directionality + * representation. + * + * @param {goog.i18n.bidi.Dir|number|boolean} givenDir Directionality given in + * one of the following formats: + * 1. A goog.i18n.bidi.Dir constant. + * 2. A number (positive = LRT, negative = RTL, 0 = unknown). + * 3. A boolean (true = RTL, false = LTR). + * @return {goog.i18n.bidi.Dir} A goog.i18n.bidi.Dir constant matching the given + * directionality. + */ +goog.i18n.bidi.toDir = function(givenDir) { + if (typeof givenDir == 'number') { + return givenDir > 0 ? goog.i18n.bidi.Dir.LTR : + givenDir < 0 ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.UNKNOWN; + } else { + return givenDir ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR; + } +}; + + +/** + * Utility class for formatting text for display in a potentially + * opposite-directionality context without garbling. Provides the following + * functionality: + * + * @param {goog.i18n.bidi.Dir|number|boolean} dir The context + * directionality as a number + * (positive = LRT, negative = RTL, 0 = unknown). + * @constructor + */ +goog.i18n.BidiFormatter = function(dir) { + this.dir_ = goog.i18n.bidi.toDir(dir); +}; + + +/** + * Returns 'dir="ltr"' or 'dir="rtl"', depending on {@code text}'s estimated + * directionality, if it is not the same as the context directionality. + * Otherwise, returns the empty string. + * + * @param {string} text Text whose directionality is to be estimated. + * @param {boolean=} opt_isHtml Whether {@code text} is HTML / HTML-escaped. + * Default: false. + * @return {string} 'dir="rtl"' for RTL text in non-RTL context; 'dir="ltr"' for + * LTR text in non-LTR context; else, the empty string. + */ +goog.i18n.BidiFormatter.prototype.dirAttr = function (text, opt_isHtml) { + var dir = soy.$$bidiTextDir(text, opt_isHtml); + return dir && dir != this.dir_ ? dir < 0 ? 'dir="rtl"' : 'dir="ltr"' : ''; +}; + +/** + * Returns the trailing horizontal edge, i.e. "right" or "left", depending on + * the global bidi directionality. + * @return {string} "left" for RTL context and "right" otherwise. + */ +goog.i18n.BidiFormatter.prototype.endEdge = function () { + return this.dir_ < 0 ? 'left' : 'right'; +}; + +/** + * Returns the Unicode BiDi mark matching the context directionality (LRM for + * LTR context directionality, RLM for RTL context directionality), or the + * empty string for neutral / unknown context directionality. + * + * @return {string} LRM for LTR context directionality and RLM for RTL context + * directionality. + */ +goog.i18n.BidiFormatter.prototype.mark = function () { + return ( + (this.dir_ > 0) ? '\u200E' /*LRM*/ : + (this.dir_ < 0) ? '\u200F' /*RLM*/ : + ''); +}; + +/** + * Returns a Unicode BiDi mark matching the context directionality (LRM or RLM) + * if the directionality or the exit directionality of {@code text} are opposite + * to the context directionality. Otherwise returns the empty string. + * + * @param {string} text The input text. + * @param {boolean=} opt_isHtml Whether {@code text} is HTML / HTML-escaped. + * Default: false. + * @return {string} A Unicode bidi mark matching the global directionality or + * the empty string. + */ +goog.i18n.BidiFormatter.prototype.markAfter = function (text, opt_isHtml) { + var dir = soy.$$bidiTextDir(text, opt_isHtml); + return soyshim.$$bidiMarkAfterKnownDir_(this.dir_, dir, text, opt_isHtml); +}; + +/** + * Formats a string of unknown directionality for use in HTML output of the + * context directionality, so an opposite-directionality string is neither + * garbled nor garbles what follows it. + * + * @param {string} str The input text. + * @param {boolean=} placeholder This argument exists for consistency with the + * Closure Library. Specifying it has no effect. + * @return {string} Input text after applying the above processing. + */ +goog.i18n.BidiFormatter.prototype.spanWrap = function(str, placeholder) { + str = String(str); + var textDir = soy.$$bidiTextDir(str, true); + var reset = soyshim.$$bidiMarkAfterKnownDir_(this.dir_, textDir, str, true); + if (textDir > 0 && this.dir_ <= 0) { + str = '' + str + ''; + } else if (textDir < 0 && this.dir_ >= 0) { + str = '' + str + ''; + } + return str + reset; +}; + +/** + * Returns the leading horizontal edge, i.e. "left" or "right", depending on + * the global bidi directionality. + * @return {string} "right" for RTL context and "left" otherwise. + */ +goog.i18n.BidiFormatter.prototype.startEdge = function () { + return this.dir_ < 0 ? 'right' : 'left'; +}; + +/** + * Formats a string of unknown directionality for use in plain-text output of + * the context directionality, so an opposite-directionality string is neither + * garbled nor garbles what follows it. + * As opposed to {@link #spanWrap}, this makes use of unicode BiDi formatting + * characters. In HTML, its *only* valid use is inside of elements that do not + * allow mark-up, e.g. an 'option' tag. + * + * @param {string} str The input text. + * @param {boolean=} placeholder This argument exists for consistency with the + * Closure Library. Specifying it has no effect. + * @return {string} Input text after applying the above processing. + */ +goog.i18n.BidiFormatter.prototype.unicodeWrap = function(str, placeholder) { + str = String(str); + var textDir = soy.$$bidiTextDir(str, true); + var reset = soyshim.$$bidiMarkAfterKnownDir_(this.dir_, textDir, str, true); + if (textDir > 0 && this.dir_ <= 0) { + str = '\u202A' + str + '\u202C'; + } else if (textDir < 0 && this.dir_ >= 0) { + str = '\u202B' + str + '\u202C'; + } + return str + reset; +}; + + +if (!goog.string) { + goog.string = { + /** + * Converts \r\n, \r, and \n to
s + * @param {*} str The string in which to convert newlines. + * @param {boolean=} opt_xml Whether to use XML compatible tags. + * @return {string} A copy of {@code str} with converted newlines. + */ + newLineToBr: function(str, opt_xml) { + + str = String(str); + + // This quick test helps in the case when there are no chars to replace, + // in the worst case this makes barely a difference to the time taken. + if (!goog.string.NEWLINE_TO_BR_RE_.test(str)) { + return str; + } + + return str.replace(/(\r\n|\r|\n)/g, opt_xml ? '
' : '
'); + }, + urlEncode: encodeURIComponent, + /** + * Regular expression used within newlineToBr(). + * @type {RegExp} + * @private + */ + NEWLINE_TO_BR_RE_: /[\r\n]/ + }; +} + +/** + * Utility class to facilitate much faster string concatenation in IE, + * using Array.join() rather than the '+' operator. For other browsers + * we simply use the '+' operator. + * + * @param {Object|number|string|boolean=} opt_a1 Optional first initial item + * to append. + * @param {...Object|number|string|boolean} var_args Other initial items to + * append, e.g., new goog.string.StringBuffer('foo', 'bar'). + * @constructor + */ +goog.string.StringBuffer = function(opt_a1, var_args) { + /** + * Internal buffer for the string to be concatenated. + * @type {string|Array} + * @private + */ + this.buffer_ = goog.userAgent.jscript.HAS_JSCRIPT ? [] : ''; + + if (opt_a1 != null) { + this.append.apply(this, arguments); + } +}; + + +/** + * Length of internal buffer (faster than calling buffer_.length). + * Only used for IE. + * @type {number} + * @private + */ +goog.string.StringBuffer.prototype.bufferLength_ = 0; + +/** + * Appends one or more items to the string. + * + * Calling this with null, undefined, or empty arguments is an error. + * + * @param {Object|number|string|boolean} a1 Required first string. + * @param {Object|number|string|boolean=} opt_a2 Optional second string. + * @param {...Object|number|string|boolean} var_args Other items to append, + * e.g., sb.append('foo', 'bar', 'baz'). + * @return {goog.string.StringBuffer} This same StringBuilder object. + */ +goog.string.StringBuffer.prototype.append = function(a1, opt_a2, var_args) { + + if (goog.userAgent.jscript.HAS_JSCRIPT) { + if (opt_a2 == null) { // no second argument (note: undefined == null) + // Array assignment is 2x faster than Array push. Also, use a1 + // directly to avoid arguments instantiation, another 2x improvement. + this.buffer_[this.bufferLength_++] = a1; + } else { + var arr = /**@type {Array.}*/(this.buffer_); + arr.push.apply(arr, arguments); + this.bufferLength_ = this.buffer_.length; + } + + } else { + + // Use a1 directly to avoid arguments instantiation for single-arg case. + this.buffer_ += a1; + if (opt_a2 != null) { // no second argument (note: undefined == null) + for (var i = 1; i < arguments.length; i++) { + this.buffer_ += arguments[i]; + } + } + } + + return this; +}; + + +/** + * Clears the string. + */ +goog.string.StringBuffer.prototype.clear = function() { + + if (goog.userAgent.jscript.HAS_JSCRIPT) { + this.buffer_.length = 0; // reuse array to avoid creating new object + this.bufferLength_ = 0; + + } else { + this.buffer_ = ''; + } +}; + + +/** + * Returns the concatenated string. + * + * @return {string} The concatenated string. + */ +goog.string.StringBuffer.prototype.toString = function() { + + if (goog.userAgent.jscript.HAS_JSCRIPT) { + var str = this.buffer_.join(''); + // Given a string with the entire contents, simplify the StringBuilder by + // setting its contents to only be this string, rather than many fragments. + this.clear(); + if (str) { + this.append(str); + } + return str; + + } else { + return /** @type {string} */ (this.buffer_); + } +}; + + +if (!goog.soy) goog.soy = { + /** + * Helper function to render a Soy template and then set the + * output string as the innerHTML of an element. It is recommended + * to use this helper function instead of directly setting + * innerHTML in your hand-written code, so that it will be easier + * to audit the code for cross-site scripting vulnerabilities. + * + * @param {Function} template The Soy template defining element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Object=} opt_injectedData The injected data for the template. + * @param {(goog.dom.DomHelper|Document)=} opt_dom The context in which DOM + * nodes will be created. + */ + renderAsElement: function( + template, opt_templateData, opt_injectedData, opt_dom) { + return /** @type {!Element} */ (soyshim.$$renderWithWrapper_( + template, opt_templateData, opt_dom, true /* asElement */, + opt_injectedData)); + }, + /** + * Helper function to render a Soy template into a single node or + * a document fragment. If the rendered HTML string represents a + * single node, then that node is returned (note that this is + * *not* a fragment, despite them name of the method). Otherwise a + * document fragment is returned containing the rendered nodes. + * + * @param {Function} template The Soy template defining element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Object=} opt_injectedData The injected data for the template. + * @param {(goog.dom.DomHelper|Document)=} opt_dom The context in which DOM + * nodes will be created. + * @return {!Node} The resulting node or document fragment. + */ + renderAsFragment: function( + template, opt_templateData, opt_injectedData, opt_dom) { + return soyshim.$$renderWithWrapper_( + template, opt_templateData, opt_dom, false /* asElement */, + opt_injectedData); + }, + /** + * Helper function to render a Soy template and then set the output string as + * the innerHTML of an element. It is recommended to use this helper function + * instead of directly setting innerHTML in your hand-written code, so that it + * will be easier to audit the code for cross-site scripting vulnerabilities. + * + * NOTE: New code should consider using goog.soy.renderElement instead. + * + * @param {Element} element The element whose content we are rendering. + * @param {Function} template The Soy template defining the element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Object=} opt_injectedData The injected data for the template. + */ + renderElement: function( + element, template, opt_templateData, opt_injectedData) { + element.innerHTML = template(opt_templateData, null, opt_injectedData); + }, + data: {} +}; + + +/** + * A type of textual content. + * + * This is an enum of type Object so that these values are unforgeable. + * + * @enum {!Object} + */ +goog.soy.data.SanitizedContentKind = { + + /** + * A snippet of HTML that does not start or end inside a tag, comment, entity, + * or DOCTYPE; and that does not contain any executable code + * (JS, {@code }s, etc.) from a different trust domain. + */ + HTML: {}, + + /** + * Executable Javascript code or expression, safe for insertion in a + * script-tag or event handler context, known to be free of any + * attacker-controlled scripts. This can either be side-effect-free + * Javascript (such as JSON) or Javascript that entirely under Google's + * control. + */ + JS: goog.DEBUG ? {sanitizedContentJsStrChars: true} : {}, + + /** + * A sequence of code units that can appear between quotes (either kind) in a + * JS program without causing a parse error, and without causing any side + * effects. + *

+ * The content should not contain unescaped quotes, newlines, or anything else + * that would cause parsing to fail or to cause a JS parser to finish the + * string its parsing inside the content. + *

+ * The content must also not end inside an escape sequence ; no partial octal + * escape sequences or odd number of '{@code \}'s at the end. + */ + JS_STR_CHARS: {}, + + /** A properly encoded portion of a URI. */ + URI: {}, + + /** + * Repeated attribute names and values. For example, + * {@code dir="ltr" foo="bar" onclick="trustedFunction()" checked}. + */ + ATTRIBUTES: goog.DEBUG ? {sanitizedContentHtmlAttribute: true} : {}, + + // TODO: Consider separating rules, declarations, and values into + // separate types, but for simplicity, we'll treat explicitly blessed + // SanitizedContent as allowed in all of these contexts. + /** + * A CSS3 declaration, property, value or group of semicolon separated + * declarations. + */ + CSS: {}, + + /** + * Unsanitized plain-text content. + * + * This is effectively the "null" entry of this enum, and is sometimes used + * to explicitly mark content that should never be used unescaped. Since any + * string is safe to use as text, being of ContentKind.TEXT makes no + * guarantees about its safety in any other context such as HTML. + */ + TEXT: {} +}; + + + +/** + * A string-like object that carries a content-type. + * + * IMPORTANT! Do not create these directly, nor instantiate the subclasses. + * Instead, use a trusted, centrally reviewed library as endorsed by your team + * to generate these objects. Otherwise, you risk accidentally creating + * SanitizedContent that is attacker-controlled and gets evaluated unescaped in + * templates. + * + * @constructor + */ +goog.soy.data.SanitizedContent = function() { + throw Error('Do not instantiate directly'); +}; + + +/** + * The context in which this content is safe from XSS attacks. + * @type {goog.soy.data.SanitizedContentKind} + */ +goog.soy.data.SanitizedContent.prototype.contentKind; + + +/** + * The already-safe content. + * @type {string} + */ +goog.soy.data.SanitizedContent.prototype.content; + + +/** @override */ +goog.soy.data.SanitizedContent.prototype.toString = function() { + return this.content; +}; + + +var soy = { esc: {} }; +var soydata = {}; +soydata.VERY_UNSAFE = {}; +var soyshim = { $$DEFAULT_TEMPLATE_DATA_: {} }; +/** + * Helper function to render a Soy template into a single node or a document + * fragment. If the rendered HTML string represents a single node, then that + * node is returned. Otherwise a document fragment is created and returned + * (wrapped in a DIV element if #opt_singleNode is true). + * + * @param {Function} template The Soy template defining the element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {(goog.dom.DomHelper|Document)=} opt_dom The context in which DOM + * nodes will be created. + * @param {boolean=} opt_asElement Whether to wrap the fragment in an + * element if the template does not render a single element. If true, + * result is always an Element. + * @param {Object=} opt_injectedData The injected data for the template. + * @return {!Node} The resulting node or document fragment. + * @private + */ +soyshim.$$renderWithWrapper_ = function( + template, opt_templateData, opt_dom, opt_asElement, opt_injectedData) { + + var dom = opt_dom || document; + var wrapper = dom.createElement('div'); + wrapper.innerHTML = template( + opt_templateData || soyshim.$$DEFAULT_TEMPLATE_DATA_, undefined, + opt_injectedData); + + // If the template renders as a single element, return it. + if (wrapper.childNodes.length == 1) { + var firstChild = wrapper.firstChild; + if (!opt_asElement || firstChild.nodeType == 1 /* Element */) { + return /** @type {!Node} */ (firstChild); + } + } + + // If we're forcing it to be a single element, return the wrapper DIV. + if (opt_asElement) { + return wrapper; + } + + // Otherwise, create and return a fragment. + var fragment = dom.createDocumentFragment(); + while (wrapper.firstChild) { + fragment.appendChild(wrapper.firstChild); + } + return fragment; +}; + + +/** + * Returns a Unicode BiDi mark matching bidiGlobalDir (LRM or RLM) if the + * directionality or the exit directionality of text are opposite to + * bidiGlobalDir. Otherwise returns the empty string. + * If opt_isHtml, makes sure to ignore the LTR nature of the mark-up and escapes + * in text, making the logic suitable for HTML and HTML-escaped text. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @param {number} dir text's directionality: 1 if ltr, -1 if rtl, 0 if unknown. + * @param {string} text The text whose directionality is to be estimated. + * @param {boolean=} opt_isHtml Whether text is HTML/HTML-escaped. + * Default: false. + * @return {string} A Unicode bidi mark matching bidiGlobalDir, or + * the empty string when text's overall and exit directionalities both match + * bidiGlobalDir, or bidiGlobalDir is 0 (unknown). + * @private + */ +soyshim.$$bidiMarkAfterKnownDir_ = function( + bidiGlobalDir, dir, text, opt_isHtml) { + return ( + bidiGlobalDir > 0 && (dir < 0 || + soyshim.$$bidiIsRtlExitText_(text, opt_isHtml)) ? '\u200E' : // LRM + bidiGlobalDir < 0 && (dir > 0 || + soyshim.$$bidiIsLtrExitText_(text, opt_isHtml)) ? '\u200F' : // RLM + ''); +}; + + +/** + * Strips str of any HTML mark-up and escapes. Imprecise in several ways, but + * precision is not very important, since the result is only meant to be used + * for directionality detection. + * @param {string} str The string to be stripped. + * @param {boolean=} opt_isHtml Whether str is HTML / HTML-escaped. + * Default: false. + * @return {string} The stripped string. + * @private + */ +soyshim.$$bidiStripHtmlIfNecessary_ = function(str, opt_isHtml) { + return opt_isHtml ? str.replace(soyshim.$$BIDI_HTML_SKIP_RE_, ' ') : str; +}; + + +/** + * Simplified regular expression for am HTML tag (opening or closing) or an HTML + * escape - the things we want to skip over in order to ignore their ltr + * characters. + * @type {RegExp} + * @private + */ +soyshim.$$BIDI_HTML_SKIP_RE_ = /<[^>]*>|&[^;]+;/g; + + +/** + * A practical pattern to identify strong LTR character. This pattern is not + * theoretically correct according to unicode standard. It is simplified for + * performance and small code size. + * @type {string} + * @private + */ +soyshim.$$bidiLtrChars_ = + 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF' + + '\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF'; + + +/** + * A practical pattern to identify strong neutral and weak character. This + * pattern is not theoretically correct according to unicode standard. It is + * simplified for performance and small code size. + * @type {string} + * @private + */ +soyshim.$$bidiNeutralChars_ = + '\u0000-\u0020!-@[-`{-\u00BF\u00D7\u00F7\u02B9-\u02FF\u2000-\u2BFF'; + + +/** + * A practical pattern to identify strong RTL character. This pattern is not + * theoretically correct according to unicode standard. It is simplified for + * performance and small code size. + * @type {string} + * @private + */ +soyshim.$$bidiRtlChars_ = '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC'; + + +/** + * Regular expressions to check if a piece of text is of RTL directionality + * on first character with strong directionality. + * @type {RegExp} + * @private + */ +soyshim.$$bidiRtlDirCheckRe_ = new RegExp( + '^[^' + soyshim.$$bidiLtrChars_ + ']*[' + soyshim.$$bidiRtlChars_ + ']'); + + +/** + * Regular expressions to check if a piece of text is of neutral directionality. + * Url are considered as neutral. + * @type {RegExp} + * @private + */ +soyshim.$$bidiNeutralDirCheckRe_ = new RegExp( + '^[' + soyshim.$$bidiNeutralChars_ + ']*$|^http://'); + + +/** + * Check the directionality of the a piece of text based on the first character + * with strong directionality. + * @param {string} str string being checked. + * @return {boolean} return true if rtl directionality is being detected. + * @private + */ +soyshim.$$bidiIsRtlText_ = function(str) { + return soyshim.$$bidiRtlDirCheckRe_.test(str); +}; + + +/** + * Check the directionality of the a piece of text based on the first character + * with strong directionality. + * @param {string} str string being checked. + * @return {boolean} true if all characters have neutral directionality. + * @private + */ +soyshim.$$bidiIsNeutralText_ = function(str) { + return soyshim.$$bidiNeutralDirCheckRe_.test(str); +}; + + +/** + * This constant controls threshold of rtl directionality. + * @type {number} + * @private + */ +soyshim.$$bidiRtlDetectionThreshold_ = 0.40; + + +/** + * Returns the RTL ratio based on word count. + * @param {string} str the string that need to be checked. + * @return {number} the ratio of RTL words among all words with directionality. + * @private + */ +soyshim.$$bidiRtlWordRatio_ = function(str) { + var rtlCount = 0; + var totalCount = 0; + var tokens = str.split(' '); + for (var i = 0; i < tokens.length; i++) { + if (soyshim.$$bidiIsRtlText_(tokens[i])) { + rtlCount++; + totalCount++; + } else if (!soyshim.$$bidiIsNeutralText_(tokens[i])) { + totalCount++; + } + } + + return totalCount == 0 ? 0 : rtlCount / totalCount; +}; + + +/** + * Regular expressions to check if the last strongly-directional character in a + * piece of text is LTR. + * @type {RegExp} + * @private + */ +soyshim.$$bidiLtrExitDirCheckRe_ = new RegExp( + '[' + soyshim.$$bidiLtrChars_ + '][^' + soyshim.$$bidiRtlChars_ + ']*$'); + + +/** + * Regular expressions to check if the last strongly-directional character in a + * piece of text is RTL. + * @type {RegExp} + * @private + */ +soyshim.$$bidiRtlExitDirCheckRe_ = new RegExp( + '[' + soyshim.$$bidiRtlChars_ + '][^' + soyshim.$$bidiLtrChars_ + ']*$'); + + +/** + * Check if the exit directionality a piece of text is LTR, i.e. if the last + * strongly-directional character in the string is LTR. + * @param {string} str string being checked. + * @param {boolean=} opt_isHtml Whether str is HTML / HTML-escaped. + * Default: false. + * @return {boolean} Whether LTR exit directionality was detected. + * @private + */ +soyshim.$$bidiIsLtrExitText_ = function(str, opt_isHtml) { + str = soyshim.$$bidiStripHtmlIfNecessary_(str, opt_isHtml); + return soyshim.$$bidiLtrExitDirCheckRe_.test(str); +}; + + +/** + * Check if the exit directionality a piece of text is RTL, i.e. if the last + * strongly-directional character in the string is RTL. + * @param {string} str string being checked. + * @param {boolean=} opt_isHtml Whether str is HTML / HTML-escaped. + * Default: false. + * @return {boolean} Whether RTL exit directionality was detected. + * @private + */ +soyshim.$$bidiIsRtlExitText_ = function(str, opt_isHtml) { + str = soyshim.$$bidiStripHtmlIfNecessary_(str, opt_isHtml); + return soyshim.$$bidiRtlExitDirCheckRe_.test(str); +}; + + +// ============================================================================= +// COPIED FROM soyutils_usegoog.js + + +// ----------------------------------------------------------------------------- +// StringBuilder (compatible with the 'stringbuilder' code style). + + +/** + * Utility class to facilitate much faster string concatenation in IE, + * using Array.join() rather than the '+' operator. For other browsers + * we simply use the '+' operator. + * + * @param {Object} var_args Initial items to append, + * e.g., new soy.StringBuilder('foo', 'bar'). + * @constructor + */ +soy.StringBuilder = goog.string.StringBuffer; + + +// ----------------------------------------------------------------------------- +// soydata: Defines typed strings, e.g. an HTML string {@code "ac"} is +// semantically distinct from the plain text string {@code "ac"} and smart +// templates can take that distinction into account. + +/** + * A type of textual content. + * + * This is an enum of type Object so that these values are unforgeable. + * + * @enum {!Object} + */ +soydata.SanitizedContentKind = goog.soy.data.SanitizedContentKind; + + +/** + * Content of type {@link soydata.SanitizedContentKind.HTML}. + * + * The content is a string of HTML that can safely be embedded in a PCDATA + * context in your app. If you would be surprised to find that an HTML + * sanitizer produced {@code s} (e.g. it runs code or fetches bad URLs) and + * you wouldn't write a template that produces {@code s} on security or privacy + * grounds, then don't pass {@code s} here. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedHtml = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedHtml, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedHtml.prototype.contentKind = soydata.SanitizedContentKind.HTML; + + +/** + * Content of type {@link soydata.SanitizedContentKind.JS}. + * + * The content is Javascript source that when evaluated does not execute any + * attacker-controlled scripts. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedJs = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedJs, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedJs.prototype.contentKind = + soydata.SanitizedContentKind.JS; + + +/** + * Content of type {@link soydata.SanitizedContentKind.JS_STR_CHARS}. + * + * The content can be safely inserted as part of a single- or double-quoted + * string without terminating the string. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedJsStrChars = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedJsStrChars, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedJsStrChars.prototype.contentKind = + soydata.SanitizedContentKind.JS_STR_CHARS; + + +/** + * Content of type {@link soydata.SanitizedContentKind.URI}. + * + * The content is a URI chunk that the caller knows is safe to emit in a + * template. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedUri = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedUri, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedUri.prototype.contentKind = soydata.SanitizedContentKind.URI; + + +/** + * Content of type {@link soydata.SanitizedContentKind.ATTRIBUTES}. + * + * The content should be safely embeddable within an open tag, such as a + * key="value" pair. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedHtmlAttribute = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedHtmlAttribute, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedHtmlAttribute.prototype.contentKind = + soydata.SanitizedContentKind.ATTRIBUTES; + + +/** + * Content of type {@link soydata.SanitizedContentKind.CSS}. + * + * The content is non-attacker-exploitable CSS, such as {@code color:#c3d9ff}. + * + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.SanitizedCss = function() { + goog.soy.data.SanitizedContent.call(this); // Throws an exception. +}; +goog.inherits(soydata.SanitizedCss, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.SanitizedCss.prototype.contentKind = + soydata.SanitizedContentKind.CSS; + + +/** + * Unsanitized plain text string. + * + * While all strings are effectively safe to use as a plain text, there are no + * guarantees about safety in any other context such as HTML. This is + * sometimes used to mark that should never be used unescaped. + * + * @param {*} content Plain text with no guarantees. + * @constructor + * @extends {goog.soy.data.SanitizedContent} + */ +soydata.UnsanitizedText = function(content) { + /** @override */ + this.content = String(content); +}; +goog.inherits(soydata.UnsanitizedText, goog.soy.data.SanitizedContent); + +/** @override */ +soydata.UnsanitizedText.prototype.contentKind = + soydata.SanitizedContentKind.TEXT; + + +/** + * Creates a factory for SanitizedContent types. + * + * This is a hack so that the soydata.VERY_UNSAFE.ordainSanitized* can + * instantiate Sanitized* classes, without making the Sanitized* constructors + * publicly usable. Requiring all construction to use the VERY_UNSAFE names + * helps callers and their reviewers easily tell that creating SanitizedContent + * is not always safe and calls for careful review. + * + * @param {function(new: T, string)} ctor A constructor. + * @return {!function(*): T} A factory that takes content and returns a + * new instance. + * @template T + * @private + */ +soydata.$$makeSanitizedContentFactory_ = function(ctor) { + /** @constructor */ + function InstantiableCtor() {} + InstantiableCtor.prototype = ctor.prototype; + return function(content) { + var result = new InstantiableCtor(); + result.content = String(content); + return result; + }; +}; + + +// ----------------------------------------------------------------------------- +// Sanitized content ordainers. Please use these with extreme caution (with the +// exception of markUnsanitizedText). A good recommendation is to limit usage +// of these to just a handful of files in your source tree where usages can be +// carefully audited. + + +/** + * Protects a string from being used in an noAutoescaped context. + * + * This is useful for content where there is significant risk of accidental + * unescaped usage in a Soy template. A great case is for user-controlled + * data that has historically been a source of vulernabilities. + * + * @param {*} content Text to protect. + * @return {!soydata.UnsanitizedText} A wrapper that is rejected by the + * Soy noAutoescape print directive. + */ +soydata.markUnsanitizedText = function(content) { + return new soydata.UnsanitizedText(content); +}; + + +/** + * Takes a leap of faith that the provided content is "safe" HTML. + * + * @param {*} content A string of HTML that can safely be embedded in + * a PCDATA context in your app. If you would be surprised to find that an + * HTML sanitizer produced {@code s} (e.g. it runs code or fetches bad URLs) + * and you wouldn't write a template that produces {@code s} on security or + * privacy grounds, then don't pass {@code s} here. + * @return {!soydata.SanitizedHtml} Sanitized content wrapper that + * indicates to Soy not to escape when printed as HTML. + */ +soydata.VERY_UNSAFE.ordainSanitizedHtml = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedHtml); + + +/** + * Takes a leap of faith that the provided content is "safe" (non-attacker- + * controlled, XSS-free) Javascript. + * + * @param {*} content Javascript source that when evaluated does not + * execute any attacker-controlled scripts. + * @return {!soydata.SanitizedJs} Sanitized content wrapper that indicates to + * Soy not to escape when printed as Javascript source. + */ +soydata.VERY_UNSAFE.ordainSanitizedJs = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedJs); + + +// TODO: This function is probably necessary, either externally or internally +// as an implementation detail. Generally, plain text will always work here, +// as there's no harm to unescaping the string and then re-escaping when +// finally printed. +/** + * Takes a leap of faith that the provided content can be safely embedded in + * a Javascript string without re-esacping. + * + * @param {*} content Content that can be safely inserted as part of a + * single- or double-quoted string without terminating the string. + * @return {!soydata.SanitizedJsStrChars} Sanitized content wrapper that + * indicates to Soy not to escape when printed in a JS string. + */ +soydata.VERY_UNSAFE.ordainSanitizedJsStrChars = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedJsStrChars); + + +/** + * Takes a leap of faith that the provided content is "safe" to use as a URI + * in a Soy template. + * + * This creates a Soy SanitizedContent object which indicates to Soy there is + * no need to escape it when printed as a URI (e.g. in an href or src + * attribute), such as if it's already been encoded or if it's a Javascript: + * URI. + * + * @param {*} content A chunk of URI that the caller knows is safe to + * emit in a template. + * @return {!soydata.SanitizedUri} Sanitized content wrapper that indicates to + * Soy not to escape or filter when printed in URI context. + */ +soydata.VERY_UNSAFE.ordainSanitizedUri = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedUri); + + +/** + * Takes a leap of faith that the provided content is "safe" to use as an + * HTML attribute. + * + * @param {*} content An attribute name and value, such as + * {@code dir="ltr"}. + * @return {!soydata.SanitizedHtmlAttribute} Sanitized content wrapper that + * indicates to Soy not to escape when printed as an HTML attribute. + */ +soydata.VERY_UNSAFE.ordainSanitizedHtmlAttribute = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedHtmlAttribute); + + +/** + * Takes a leap of faith that the provided content is "safe" to use as CSS + * in a style attribute or block. + * + * @param {*} content CSS, such as {@code color:#c3d9ff}. + * @return {!soydata.SanitizedCss} Sanitized CSS wrapper that indicates to + * Soy there is no need to escape or filter when printed in CSS context. + */ +soydata.VERY_UNSAFE.ordainSanitizedCss = + soydata.$$makeSanitizedContentFactory_(soydata.SanitizedCss); + + +// ----------------------------------------------------------------------------- +// Public utilities. + + +/** + * Helper function to render a Soy template and then set the output string as + * the innerHTML of an element. It is recommended to use this helper function + * instead of directly setting innerHTML in your hand-written code, so that it + * will be easier to audit the code for cross-site scripting vulnerabilities. + * + * NOTE: New code should consider using goog.soy.renderElement instead. + * + * @param {Element} element The element whose content we are rendering. + * @param {Function} template The Soy template defining the element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Object=} opt_injectedData The injected data for the template. + */ +soy.renderElement = goog.soy.renderElement; + + +/** + * Helper function to render a Soy template into a single node or a document + * fragment. If the rendered HTML string represents a single node, then that + * node is returned (note that this is *not* a fragment, despite them name of + * the method). Otherwise a document fragment is returned containing the + * rendered nodes. + * + * NOTE: New code should consider using goog.soy.renderAsFragment + * instead (note that the arguments are different). + * + * @param {Function} template The Soy template defining the element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Document=} opt_document The document used to create DOM nodes. If not + * specified, global document object is used. + * @param {Object=} opt_injectedData The injected data for the template. + * @return {!Node} The resulting node or document fragment. + */ +soy.renderAsFragment = function( + template, opt_templateData, opt_document, opt_injectedData) { + return goog.soy.renderAsFragment( + template, opt_templateData, opt_injectedData, + new goog.dom.DomHelper(opt_document)); +}; + + +/** + * Helper function to render a Soy template into a single node. If the rendered + * HTML string represents a single node, then that node is returned. Otherwise, + * a DIV element is returned containing the rendered nodes. + * + * NOTE: New code should consider using goog.soy.renderAsElement + * instead (note that the arguments are different). + * + * @param {Function} template The Soy template defining the element's content. + * @param {Object=} opt_templateData The data for the template. + * @param {Document=} opt_document The document used to create DOM nodes. If not + * specified, global document object is used. + * @param {Object=} opt_injectedData The injected data for the template. + * @return {!Element} Rendered template contents, wrapped in a parent DIV + * element if necessary. + */ +soy.renderAsElement = function( + template, opt_templateData, opt_document, opt_injectedData) { + return goog.soy.renderAsElement( + template, opt_templateData, opt_injectedData, + new goog.dom.DomHelper(opt_document)); +}; + + +// ----------------------------------------------------------------------------- +// Below are private utilities to be used by Soy-generated code only. + + +/** + * Builds an augmented map. The returned map will contain mappings from both + * the base map and the additional map. If the same key appears in both, then + * the value from the additional map will be visible, while the value from the + * base map will be hidden. The base map will be used, but not modified. + * + * @param {!Object} baseMap The original map to augment. + * @param {!Object} additionalMap A map containing the additional mappings. + * @return {!Object} An augmented map containing both the original and + * additional mappings. + */ +soy.$$augmentMap = function(baseMap, additionalMap) { + + // Create a new map whose '__proto__' field is set to baseMap. + /** @constructor */ + function TempCtor() {} + TempCtor.prototype = baseMap; + var augmentedMap = new TempCtor(); + + // Add the additional mappings to the new map. + for (var key in additionalMap) { + augmentedMap[key] = additionalMap[key]; + } + + return augmentedMap; +}; + + +/** + * Checks that the given map key is a string. + * @param {*} key Key to check. + * @return {string} The given key. + */ +soy.$$checkMapKey = function(key) { + if ((typeof key) != 'string') { + throw Error( + 'Map literal\'s key expression must evaluate to string' + + ' (encountered type "' + (typeof key) + '").'); + } + return key; +}; + + +/** + * Gets the keys in a map as an array. There are no guarantees on the order. + * @param {Object} map The map to get the keys of. + * @return {Array.} The array of keys in the given map. + */ +soy.$$getMapKeys = function(map) { + var mapKeys = []; + for (var key in map) { + mapKeys.push(key); + } + return mapKeys; +}; + + +/** + * Gets a consistent unique id for the given delegate template name. Two calls + * to this function will return the same id if and only if the input names are + * the same. + * + *

Important: This function must always be called with a string constant. + * + *

If Closure Compiler is not being used, then this is just this identity + * function. If Closure Compiler is being used, then each call to this function + * will be replaced with a short string constant, which will be consistent per + * input name. + * + * @param {string} delTemplateName The delegate template name for which to get a + * consistent unique id. + * @return {string} A unique id that is consistent per input name. + * + * @consistentIdGenerator + */ +soy.$$getDelTemplateId = function(delTemplateName) { + return delTemplateName; +}; + + +/** + * Map from registered delegate template key to the priority of the + * implementation. + * @type {Object} + * @private + */ +soy.$$DELEGATE_REGISTRY_PRIORITIES_ = {}; + +/** + * Map from registered delegate template key to the implementation function. + * @type {Object} + * @private + */ +soy.$$DELEGATE_REGISTRY_FUNCTIONS_ = {}; + + +/** + * Registers a delegate implementation. If the same delegate template key (id + * and variant) has been registered previously, then priority values are + * compared and only the higher priority implementation is stored (if + * priorities are equal, an error is thrown). + * + * @param {string} delTemplateId The delegate template id. + * @param {string} delTemplateVariant The delegate template variant (can be + * empty string). + * @param {number} delPriority The implementation's priority value. + * @param {Function} delFn The implementation function. + */ +soy.$$registerDelegateFn = function( + delTemplateId, delTemplateVariant, delPriority, delFn) { + + var mapKey = 'key_' + delTemplateId + ':' + delTemplateVariant; + var currPriority = soy.$$DELEGATE_REGISTRY_PRIORITIES_[mapKey]; + if (currPriority === undefined || delPriority > currPriority) { + // Registering new or higher-priority function: replace registry entry. + soy.$$DELEGATE_REGISTRY_PRIORITIES_[mapKey] = delPriority; + soy.$$DELEGATE_REGISTRY_FUNCTIONS_[mapKey] = delFn; + } else if (delPriority == currPriority) { + // Registering same-priority function: error. + throw Error( + 'Encountered two active delegates with the same priority ("' + + delTemplateId + ':' + delTemplateVariant + '").'); + } else { + // Registering lower-priority function: do nothing. + } +}; + + +/** + * Retrieves the (highest-priority) implementation that has been registered for + * a given delegate template key (id and variant). If no implementation has + * been registered for the key, then the fallback is the same id with empty + * variant. If the fallback is also not registered, and allowsEmptyDefault is + * true, then returns an implementation that is equivalent to an empty template + * (i.e. rendered output would be empty string). + * + * @param {string} delTemplateId The delegate template id. + * @param {string} delTemplateVariant The delegate template variant (can be + * empty string). + * @param {boolean} allowsEmptyDefault Whether to default to the empty template + * function if there's no active implementation. + * @return {Function} The retrieved implementation function. + */ +soy.$$getDelegateFn = function( + delTemplateId, delTemplateVariant, allowsEmptyDefault) { + + var delFn = soy.$$DELEGATE_REGISTRY_FUNCTIONS_[ + 'key_' + delTemplateId + ':' + delTemplateVariant]; + if (! delFn && delTemplateVariant != '') { + // Fallback to empty variant. + delFn = soy.$$DELEGATE_REGISTRY_FUNCTIONS_['key_' + delTemplateId + ':']; + } + + if (delFn) { + return delFn; + } else if (allowsEmptyDefault) { + return soy.$$EMPTY_TEMPLATE_FN_; + } else { + throw Error( + 'Found no active impl for delegate call to "' + delTemplateId + ':' + + delTemplateVariant + '" (and not allowemptydefault="true").'); + } +}; + + +/** + * Private helper soy.$$getDelegateFn(). This is the empty template function + * that is returned whenever there's no delegate implementation found. + * + * @param {Object.=} opt_data + * @param {soy.StringBuilder=} opt_sb + * @param {Object.=} opt_ijData + * @return {string} + * @private + */ +soy.$$EMPTY_TEMPLATE_FN_ = function(opt_data, opt_sb, opt_ijData) { + return ''; +}; + + +// ----------------------------------------------------------------------------- +// Escape/filter/normalize. + + +/** + * Escapes HTML special characters in a string. Escapes double quote '"' in + * addition to '&', '<', and '>' so that a string can be included in an HTML + * tag attribute value within double quotes. + * Will emit known safe HTML as-is. + * + * @param {*} value The string-like value to be escaped. May not be a string, + * but the value will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeHtml = function(value) { + // TODO: Perhaps we should just ignore the contentKind property and instead + // look only at the constructor. + if (value && value.contentKind && + value.contentKind === goog.soy.data.SanitizedContentKind.HTML) { + goog.asserts.assert( + value.constructor === soydata.SanitizedHtml); + return value.content; + } + return soy.esc.$$escapeHtmlHelper(value); +}; + + +/** + * Strips unsafe tags to convert a string of untrusted HTML into HTML that + * is safe to embed. + * + * @param {*} value The string-like value to be escaped. May not be a string, + * but the value will be coerced to a string. + * @return {string} A sanitized and normalized version of value. + */ +soy.$$cleanHtml = function(value) { + if (value && value.contentKind && + value.contentKind === goog.soy.data.SanitizedContentKind.HTML) { + goog.asserts.assert( + value.constructor === soydata.SanitizedHtml); + return value.content; + } + return soy.$$stripHtmlTags(value, soy.esc.$$SAFE_TAG_WHITELIST_); +}; + + +/** + * Escapes HTML special characters in a string so that it can be embedded in + * RCDATA. + *

+ * Escapes HTML special characters so that the value will not prematurely end + * the body of a tag like {@code }. + *

+ * Will normalize known safe HTML to make sure that sanitized HTML (which could + * contain an innocuous {@code } don't prematurely end an RCDATA + * element. + * + * @param {*} value The string-like value to be escaped. May not be a string, + * but the value will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeHtmlRcdata = function(value) { + if (value && value.contentKind && + value.contentKind === goog.soy.data.SanitizedContentKind.HTML) { + goog.asserts.assert( + value.constructor === soydata.SanitizedHtml); + return soy.esc.$$normalizeHtmlHelper(value.content); + } + return soy.esc.$$escapeHtmlHelper(value); +}; + + +/** + * Matches any/only HTML5 void elements' start tags. + * See http://www.w3.org/TR/html-markup/syntax.html#syntax-elements + * @type {RegExp} + * @private + */ +soy.$$HTML5_VOID_ELEMENTS_ = new RegExp( + '^<(?:area|base|br|col|command|embed|hr|img|input' + + '|keygen|link|meta|param|source|track|wbr)\\b'); + + +/** + * Removes HTML tags from a string of known safe HTML. + * If opt_tagWhitelist is not specified or is empty, then + * the result can be used as an attribute value. + * + * @param {*} value The HTML to be escaped. May not be a string, but the + * value will be coerced to a string. + * @param {Object.=} opt_tagWhitelist Has an own property whose + * name is a lower-case tag name and whose value is {@code 1} for + * each element that is allowed in the output. + * @return {string} A representation of value without disallowed tags, + * HTML comments, or other non-text content. + */ +soy.$$stripHtmlTags = function(value, opt_tagWhitelist) { + if (!opt_tagWhitelist) { + // If we have no white-list, then use a fast track which elides all tags. + return String(value).replace(soy.esc.$$HTML_TAG_REGEX_, '') + // This is just paranoia since callers should normalize the result + // anyway, but if they didn't, it would be necessary to ensure that + // after the first replace non-tag uses of < do not recombine into + // tags as in "<script>alert(1337)script>". + .replace(soy.esc.$$LT_REGEX_, '<'); + } + + // Escapes '[' so that we can use [123] below to mark places where tags + // have been removed. + var html = String(value).replace(/\[/g, '['); + + // Consider all uses of '<' and replace whitelisted tags with markers like + // [1] which are indices into a list of approved tag names. + // Replace all other uses of < and > with entities. + var tags = []; + html = html.replace( + soy.esc.$$HTML_TAG_REGEX_, + function(tok, tagName) { + if (tagName) { + tagName = tagName.toLowerCase(); + if (opt_tagWhitelist.hasOwnProperty(tagName) && + opt_tagWhitelist[tagName]) { + var start = tok.charAt(1) === '/' ? ''; + return '[' + index + ']'; + } + } + return ''; + }); + + // Escape HTML special characters. Now there are no '<' in html that could + // start a tag. + html = soy.esc.$$normalizeHtmlHelper(html); + + var finalCloseTags = soy.$$balanceTags_(tags); + + // Now html contains no tags or less-than characters that could become + // part of a tag via a replacement operation and tags only contains + // approved tags. + // Reinsert the white-listed tags. + html = html.replace( + /\[(\d+)\]/g, function(_, index) { return tags[index]; }); + + // Close any still open tags. + // This prevents unclosed formatting elements like

    and from + // breaking the layout of containing HTML. + return html + finalCloseTags; +}; + + +/** + * Throw out any close tags that don't correspond to start tags. + * If {@code
    } is used for formatting, embedded HTML shouldn't be able + * to use a mismatched {@code
    } to break page layout. + * + * @param {Array.} tags an array of tags that will be modified in place + * include tags, the empty string, or concatenations of empty tags. + * @return {string} zero or more closed tags that close all elements that are + * opened in tags but not closed. + * @private + */ +soy.$$balanceTags_ = function(tags) { + var open = []; + for (var i = 0, n = tags.length; i < n; ++i) { + var tag = tags[i]; + if (tag.charAt(1) === '/') { + var openTagIndex = open.length - 1; + // NOTE: This is essentially lastIndexOf, but it's not supported in IE. + while (openTagIndex >= 0 && open[openTagIndex] != tag) { + openTagIndex--; + } + if (openTagIndex < 0) { + tags[i] = ''; // Drop close tag. + } else { + tags[i] = open.slice(openTagIndex).reverse().join(''); + open.length = openTagIndex; + } + } else if (!soy.$$HTML5_VOID_ELEMENTS_.test(tag)) { + open.push('Hello World + return soy.esc.$$filterHtmlElementNameHelper(value); +}; + + +/** + * Escapes characters in the value to make it valid content for a JS string + * literal. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + * @deprecated + */ +soy.$$escapeJs = function(value) { + return soy.$$escapeJsString(value); +}; + + +/** + * Escapes characters in the value to make it valid content for a JS string + * literal. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeJsString = function(value) { + if (value && + value.contentKind === goog.soy.data.SanitizedContentKind.JS_STR_CHARS) { + // TODO: It might still be worthwhile to normalize it to remove + // unescaped quotes, null, etc: replace(/(?:^|[^\])['"]/g, '\\$ + goog.asserts.assert(value.constructor === + soydata.SanitizedJsStrChars); + return value.content; + } + return soy.esc.$$escapeJsStringHelper(value); +}; + + +/** + * Encodes a value as a JavaScript literal. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} A JavaScript code representation of the input. + */ +soy.$$escapeJsValue = function(value) { + // We surround values with spaces so that they can't be interpolated into + // identifiers by accident. + // We could use parentheses but those might be interpreted as a function call. + if (value == null) { // Intentionally matches undefined. + // Java returns null from maps where there is no corresponding key while + // JS returns undefined. + // We always output null for compatibility with Java which does not have a + // distinct undefined value. + return ' null '; + } + if (value.contentKind == goog.soy.data.SanitizedContentKind.JS) { + goog.asserts.assert(value.constructor === + soydata.SanitizedJs); + return value.content; + } + switch (typeof value) { + case 'boolean': case 'number': + return ' ' + value + ' '; + default: + return "'" + soy.esc.$$escapeJsStringHelper(String(value)) + "'"; + } +}; + + +/** + * Escapes characters in the string to make it valid content for a JS regular + * expression literal. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeJsRegex = function(value) { + return soy.esc.$$escapeJsRegexHelper(value); +}; + + +/** + * Matches all URI mark characters that conflict with HTML attribute delimiters + * or that cannot appear in a CSS uri. + * From G.2: CSS grammar + *
    + *     url        ([!#$%&*-~]|{nonascii}|{escape})*
    + * 
    + * + * @type {RegExp} + * @private + */ +soy.$$problematicUriMarks_ = /['()]/g; + +/** + * @param {string} ch A single character in {@link soy.$$problematicUriMarks_}. + * @return {string} + * @private + */ +soy.$$pctEncode_ = function(ch) { + return '%' + ch.charCodeAt(0).toString(16); +}; + +/** + * Escapes a string so that it can be safely included in a URI. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeUri = function(value) { + if (value && value.contentKind === goog.soy.data.SanitizedContentKind.URI) { + goog.asserts.assert(value.constructor === + soydata.SanitizedUri); + return soy.$$normalizeUri(value); + } + // Apostophes and parentheses are not matched by encodeURIComponent. + // They are technically special in URIs, but only appear in the obsolete mark + // production in Appendix D.2 of RFC 3986, so can be encoded without changing + // semantics. + var encoded = soy.esc.$$escapeUriHelper(value); + soy.$$problematicUriMarks_.lastIndex = 0; + if (soy.$$problematicUriMarks_.test(encoded)) { + return encoded.replace(soy.$$problematicUriMarks_, soy.$$pctEncode_); + } + return encoded; +}; + + +/** + * Removes rough edges from a URI by escaping any raw HTML/JS string delimiters. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$normalizeUri = function(value) { + return soy.esc.$$normalizeUriHelper(value); +}; + + +/** + * Vets a URI's protocol and removes rough edges from a URI by escaping + * any raw HTML/JS string delimiters. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$filterNormalizeUri = function(value) { + if (value && value.contentKind == goog.soy.data.SanitizedContentKind.URI) { + goog.asserts.assert(value.constructor === + soydata.SanitizedUri); + return soy.$$normalizeUri(value); + } + return soy.esc.$$filterNormalizeUriHelper(value); +}; + + +/** + * Escapes a string so it can safely be included inside a quoted CSS string. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} An escaped version of value. + */ +soy.$$escapeCssString = function(value) { + return soy.esc.$$escapeCssStringHelper(value); +}; + + +/** + * Encodes a value as a CSS identifier part, keyword, or quantity. + * + * @param {*} value The value to escape. May not be a string, but the value + * will be coerced to a string. + * @return {string} A safe CSS identifier part, keyword, or quanitity. + */ +soy.$$filterCssValue = function(value) { + if (value && value.contentKind === goog.soy.data.SanitizedContentKind.CSS) { + goog.asserts.assert(value.constructor === + soydata.SanitizedCss); + return value.content; + } + // Uses == to intentionally match null and undefined for Java compatibility. + if (value == null) { + return ''; + } + return soy.esc.$$filterCssValueHelper(value); +}; + + +/** + * Sanity-checks noAutoescape input for explicitly tainted content. + * + * SanitizedContentKind.TEXT is used to explicitly mark input that was never + * meant to be used unescaped. + * + * @param {*} value The value to filter. + * @return {string} The value, that we dearly hope will not cause an attack. + */ +soy.$$filterNoAutoescape = function(value) { + if (value && value.contentKind === goog.soy.data.SanitizedContentKind.TEXT) { + // Fail in development mode. + goog.asserts.fail( + 'Tainted SanitizedContentKind.TEXT for |noAutoescape: `%s`', + [value.content]); + // Return innocuous data in production. + return 'zSoyz'; + } + return String(value); +}; + + +// ----------------------------------------------------------------------------- +// Basic directives/functions. + + +/** + * Converts \r\n, \r, and \n to
    s + * @param {*} str The string in which to convert newlines. + * @return {string} A copy of {@code str} with converted newlines. + */ +soy.$$changeNewlineToBr = function(str) { + return goog.string.newLineToBr(String(str), false); +}; + + +/** + * Inserts word breaks ('wbr' tags) into a HTML string at a given interval. The + * counter is reset if a space is encountered. Word breaks aren't inserted into + * HTML tags or entities. Entites count towards the character count; HTML tags + * do not. + * + * @param {*} str The HTML string to insert word breaks into. Can be other + * types, but the value will be coerced to a string. + * @param {number} maxCharsBetweenWordBreaks Maximum number of non-space + * characters to allow before adding a word break. + * @return {string} The string including word breaks. + */ +soy.$$insertWordBreaks = function(str, maxCharsBetweenWordBreaks) { + return goog.format.insertWordBreaks(String(str), maxCharsBetweenWordBreaks); +}; + + +/** + * Truncates a string to a given max length (if it's currently longer), + * optionally adding ellipsis at the end. + * + * @param {*} str The string to truncate. Can be other types, but the value will + * be coerced to a string. + * @param {number} maxLen The maximum length of the string after truncation + * (including ellipsis, if applicable). + * @param {boolean} doAddEllipsis Whether to add ellipsis if the string needs + * truncation. + * @return {string} The string after truncation. + */ +soy.$$truncate = function(str, maxLen, doAddEllipsis) { + + str = String(str); + if (str.length <= maxLen) { + return str; // no need to truncate + } + + // If doAddEllipsis, either reduce maxLen to compensate, or else if maxLen is + // too small, just turn off doAddEllipsis. + if (doAddEllipsis) { + if (maxLen > 3) { + maxLen -= 3; + } else { + doAddEllipsis = false; + } + } + + // Make sure truncating at maxLen doesn't cut up a unicode surrogate pair. + if (soy.$$isHighSurrogate_(str.charAt(maxLen - 1)) && + soy.$$isLowSurrogate_(str.charAt(maxLen))) { + maxLen -= 1; + } + + // Truncate. + str = str.substring(0, maxLen); + + // Add ellipsis. + if (doAddEllipsis) { + str += '...'; + } + + return str; +}; + +/** + * Private helper for $$truncate() to check whether a char is a high surrogate. + * @param {string} ch The char to check. + * @return {boolean} Whether the given char is a unicode high surrogate. + * @private + */ +soy.$$isHighSurrogate_ = function(ch) { + return 0xD800 <= ch && ch <= 0xDBFF; +}; + +/** + * Private helper for $$truncate() to check whether a char is a low surrogate. + * @param {string} ch The char to check. + * @return {boolean} Whether the given char is a unicode low surrogate. + * @private + */ +soy.$$isLowSurrogate_ = function(ch) { + return 0xDC00 <= ch && ch <= 0xDFFF; +}; + + +// ----------------------------------------------------------------------------- +// Bidi directives/functions. + + +/** + * Cache of bidi formatter by context directionality, so we don't keep on + * creating new objects. + * @type {!Object.} + * @private + */ +soy.$$bidiFormatterCache_ = {}; + + +/** + * Returns cached bidi formatter for bidiGlobalDir, or creates a new one. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @return {goog.i18n.BidiFormatter} A formatter for bidiGlobalDir. + * @private + */ +soy.$$getBidiFormatterInstance_ = function(bidiGlobalDir) { + return soy.$$bidiFormatterCache_[bidiGlobalDir] || + (soy.$$bidiFormatterCache_[bidiGlobalDir] = + new goog.i18n.BidiFormatter(bidiGlobalDir)); +}; + + +/** + * Estimate the overall directionality of text. If opt_isHtml, makes sure to + * ignore the LTR nature of the mark-up and escapes in text, making the logic + * suitable for HTML and HTML-escaped text. + * @param {string} text The text whose directionality is to be estimated. + * @param {boolean=} opt_isHtml Whether text is HTML/HTML-escaped. + * Default: false. + * @return {number} 1 if text is LTR, -1 if it is RTL, and 0 if it is neutral. + */ +soy.$$bidiTextDir = function(text, opt_isHtml) { + if (!text) { + return 0; + } + return goog.i18n.bidi.detectRtlDirectionality(text, opt_isHtml) ? -1 : 1; +}; + + +/** + * Returns 'dir="ltr"' or 'dir="rtl"', depending on text's estimated + * directionality, if it is not the same as bidiGlobalDir. + * Otherwise, returns the empty string. + * If opt_isHtml, makes sure to ignore the LTR nature of the mark-up and escapes + * in text, making the logic suitable for HTML and HTML-escaped text. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @param {string} text The text whose directionality is to be estimated. + * @param {boolean=} opt_isHtml Whether text is HTML/HTML-escaped. + * Default: false. + * @return {soydata.SanitizedHtmlAttribute} 'dir="rtl"' for RTL text in non-RTL + * context; 'dir="ltr"' for LTR text in non-LTR context; + * else, the empty string. + */ +soy.$$bidiDirAttr = function(bidiGlobalDir, text, opt_isHtml) { + return soydata.VERY_UNSAFE.ordainSanitizedHtmlAttribute( + soy.$$getBidiFormatterInstance_(bidiGlobalDir).dirAttr(text, opt_isHtml)); +}; + + +/** + * Returns a Unicode BiDi mark matching bidiGlobalDir (LRM or RLM) if the + * directionality or the exit directionality of text are opposite to + * bidiGlobalDir. Otherwise returns the empty string. + * If opt_isHtml, makes sure to ignore the LTR nature of the mark-up and escapes + * in text, making the logic suitable for HTML and HTML-escaped text. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @param {string} text The text whose directionality is to be estimated. + * @param {boolean=} opt_isHtml Whether text is HTML/HTML-escaped. + * Default: false. + * @return {string} A Unicode bidi mark matching bidiGlobalDir, or the empty + * string when text's overall and exit directionalities both match + * bidiGlobalDir, or bidiGlobalDir is 0 (unknown). + */ +soy.$$bidiMarkAfter = function(bidiGlobalDir, text, opt_isHtml) { + var formatter = soy.$$getBidiFormatterInstance_(bidiGlobalDir); + return formatter.markAfter(text, opt_isHtml); +}; + + +/** + * Returns str wrapped in a according to its directionality + * - but only if that is neither neutral nor the same as the global context. + * Otherwise, returns str unchanged. + * Always treats str as HTML/HTML-escaped, i.e. ignores mark-up and escapes when + * estimating str's directionality. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @param {*} str The string to be wrapped. Can be other types, but the value + * will be coerced to a string. + * @return {string} The wrapped string. + */ +soy.$$bidiSpanWrap = function(bidiGlobalDir, str) { + var formatter = soy.$$getBidiFormatterInstance_(bidiGlobalDir); + return formatter.spanWrap(str + '', true); +}; + + +/** + * Returns str wrapped in Unicode BiDi formatting characters according to its + * directionality, i.e. either LRE or RLE at the beginning and PDF at the end - + * but only if str's directionality is neither neutral nor the same as the + * global context. Otherwise, returns str unchanged. + * Always treats str as HTML/HTML-escaped, i.e. ignores mark-up and escapes when + * estimating str's directionality. + * @param {number} bidiGlobalDir The global directionality context: 1 if ltr, -1 + * if rtl, 0 if unknown. + * @param {*} str The string to be wrapped. Can be other types, but the value + * will be coerced to a string. + * @return {string} The wrapped string. + */ +soy.$$bidiUnicodeWrap = function(bidiGlobalDir, str) { + var formatter = soy.$$getBidiFormatterInstance_(bidiGlobalDir); + return formatter.unicodeWrap(str + '', true); +}; + + +// ----------------------------------------------------------------------------- +// Generated code. + + + + +// START GENERATED CODE FOR ESCAPERS. + +/** + * @type {function (*) : string} + */ +soy.esc.$$escapeUriHelper = function(v) { + return encodeURIComponent(String(v)); +}; + +/** + * Maps charcters to the escaped versions for the named escape directives. + * @type {Object.} + * @private + */ +soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_ = { + '\x00': '\x26#0;', + '\x22': '\x26quot;', + '\x26': '\x26amp;', + '\x27': '\x26#39;', + '\x3c': '\x26lt;', + '\x3e': '\x26gt;', + '\x09': '\x26#9;', + '\x0a': '\x26#10;', + '\x0b': '\x26#11;', + '\x0c': '\x26#12;', + '\x0d': '\x26#13;', + ' ': '\x26#32;', + '-': '\x26#45;', + '\/': '\x26#47;', + '\x3d': '\x26#61;', + '`': '\x26#96;', + '\x85': '\x26#133;', + '\xa0': '\x26#160;', + '\u2028': '\x26#8232;', + '\u2029': '\x26#8233;' +}; + +/** + * A function that can be used with String.replace.. + * @param {string} ch A single character matched by a compatible matcher. + * @return {string} A token in the output language. + * @private + */ +soy.esc.$$REPLACER_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_ = function(ch) { + return soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_[ch]; +}; + +/** + * Maps charcters to the escaped versions for the named escape directives. + * @type {Object.} + * @private + */ +soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_JS_STRING__AND__ESCAPE_JS_REGEX_ = { + '\x00': '\\x00', + '\x08': '\\x08', + '\x09': '\\t', + '\x0a': '\\n', + '\x0b': '\\x0b', + '\x0c': '\\f', + '\x0d': '\\r', + '\x22': '\\x22', + '\x26': '\\x26', + '\x27': '\\x27', + '\/': '\\\/', + '\x3c': '\\x3c', + '\x3d': '\\x3d', + '\x3e': '\\x3e', + '\\': '\\\\', + '\x85': '\\x85', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + '$': '\\x24', + '(': '\\x28', + ')': '\\x29', + '*': '\\x2a', + '+': '\\x2b', + ',': '\\x2c', + '-': '\\x2d', + '.': '\\x2e', + ':': '\\x3a', + '?': '\\x3f', + '[': '\\x5b', + ']': '\\x5d', + '^': '\\x5e', + '{': '\\x7b', + '|': '\\x7c', + '}': '\\x7d' +}; + +/** + * A function that can be used with String.replace.. + * @param {string} ch A single character matched by a compatible matcher. + * @return {string} A token in the output language. + * @private + */ +soy.esc.$$REPLACER_FOR_ESCAPE_JS_STRING__AND__ESCAPE_JS_REGEX_ = function(ch) { + return soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_JS_STRING__AND__ESCAPE_JS_REGEX_[ch]; +}; + +/** + * Maps charcters to the escaped versions for the named escape directives. + * @type {Object.} + * @private + */ +soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_CSS_STRING_ = { + '\x00': '\\0 ', + '\x08': '\\8 ', + '\x09': '\\9 ', + '\x0a': '\\a ', + '\x0b': '\\b ', + '\x0c': '\\c ', + '\x0d': '\\d ', + '\x22': '\\22 ', + '\x26': '\\26 ', + '\x27': '\\27 ', + '(': '\\28 ', + ')': '\\29 ', + '*': '\\2a ', + '\/': '\\2f ', + ':': '\\3a ', + ';': '\\3b ', + '\x3c': '\\3c ', + '\x3d': '\\3d ', + '\x3e': '\\3e ', + '@': '\\40 ', + '\\': '\\5c ', + '{': '\\7b ', + '}': '\\7d ', + '\x85': '\\85 ', + '\xa0': '\\a0 ', + '\u2028': '\\2028 ', + '\u2029': '\\2029 ' +}; + +/** + * A function that can be used with String.replace.. + * @param {string} ch A single character matched by a compatible matcher. + * @return {string} A token in the output language. + * @private + */ +soy.esc.$$REPLACER_FOR_ESCAPE_CSS_STRING_ = function(ch) { + return soy.esc.$$ESCAPE_MAP_FOR_ESCAPE_CSS_STRING_[ch]; +}; + +/** + * Maps charcters to the escaped versions for the named escape directives. + * @type {Object.} + * @private + */ +soy.esc.$$ESCAPE_MAP_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_ = { + '\x00': '%00', + '\x01': '%01', + '\x02': '%02', + '\x03': '%03', + '\x04': '%04', + '\x05': '%05', + '\x06': '%06', + '\x07': '%07', + '\x08': '%08', + '\x09': '%09', + '\x0a': '%0A', + '\x0b': '%0B', + '\x0c': '%0C', + '\x0d': '%0D', + '\x0e': '%0E', + '\x0f': '%0F', + '\x10': '%10', + '\x11': '%11', + '\x12': '%12', + '\x13': '%13', + '\x14': '%14', + '\x15': '%15', + '\x16': '%16', + '\x17': '%17', + '\x18': '%18', + '\x19': '%19', + '\x1a': '%1A', + '\x1b': '%1B', + '\x1c': '%1C', + '\x1d': '%1D', + '\x1e': '%1E', + '\x1f': '%1F', + ' ': '%20', + '\x22': '%22', + '\x27': '%27', + '(': '%28', + ')': '%29', + '\x3c': '%3C', + '\x3e': '%3E', + '\\': '%5C', + '{': '%7B', + '}': '%7D', + '\x7f': '%7F', + '\x85': '%C2%85', + '\xa0': '%C2%A0', + '\u2028': '%E2%80%A8', + '\u2029': '%E2%80%A9', + '\uff01': '%EF%BC%81', + '\uff03': '%EF%BC%83', + '\uff04': '%EF%BC%84', + '\uff06': '%EF%BC%86', + '\uff07': '%EF%BC%87', + '\uff08': '%EF%BC%88', + '\uff09': '%EF%BC%89', + '\uff0a': '%EF%BC%8A', + '\uff0b': '%EF%BC%8B', + '\uff0c': '%EF%BC%8C', + '\uff0f': '%EF%BC%8F', + '\uff1a': '%EF%BC%9A', + '\uff1b': '%EF%BC%9B', + '\uff1d': '%EF%BC%9D', + '\uff1f': '%EF%BC%9F', + '\uff20': '%EF%BC%A0', + '\uff3b': '%EF%BC%BB', + '\uff3d': '%EF%BC%BD' +}; + +/** + * A function that can be used with String.replace.. + * @param {string} ch A single character matched by a compatible matcher. + * @return {string} A token in the output language. + * @private + */ +soy.esc.$$REPLACER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_ = function(ch) { + return soy.esc.$$ESCAPE_MAP_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_[ch]; +}; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_ESCAPE_HTML_ = /[\x00\x22\x26\x27\x3c\x3e]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_NORMALIZE_HTML_ = /[\x00\x22\x27\x3c\x3e]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_ESCAPE_HTML_NOSPACE_ = /[\x00\x09-\x0d \x22\x26\x27\x2d\/\x3c-\x3e`\x85\xa0\u2028\u2029]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_NORMALIZE_HTML_NOSPACE_ = /[\x00\x09-\x0d \x22\x27\x2d\/\x3c-\x3e`\x85\xa0\u2028\u2029]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_ESCAPE_JS_STRING_ = /[\x00\x08-\x0d\x22\x26\x27\/\x3c-\x3e\\\x85\u2028\u2029]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_ESCAPE_JS_REGEX_ = /[\x00\x08-\x0d\x22\x24\x26-\/\x3a\x3c-\x3f\x5b-\x5e\x7b-\x7d\x85\u2028\u2029]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_ESCAPE_CSS_STRING_ = /[\x00\x08-\x0d\x22\x26-\x2a\/\x3a-\x3e@\\\x7b\x7d\x85\xa0\u2028\u2029]/g; + +/** + * Matches characters that need to be escaped for the named directives. + * @type RegExp + * @private + */ +soy.esc.$$MATCHER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_ = /[\x00- \x22\x27-\x29\x3c\x3e\\\x7b\x7d\x7f\x85\xa0\u2028\u2029\uff01\uff03\uff04\uff06-\uff0c\uff0f\uff1a\uff1b\uff1d\uff1f\uff20\uff3b\uff3d]/g; + +/** + * A pattern that vets values produced by the named directives. + * @type RegExp + * @private + */ +soy.esc.$$FILTER_FOR_FILTER_CSS_VALUE_ = /^(?!-*(?:expression|(?:moz-)?binding))(?:[.#]?-?(?:[_a-z0-9-]+)(?:-[_a-z0-9-]+)*-?|-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[a-z]{1,2}|%)?|!important|)$/i; + +/** + * A pattern that vets values produced by the named directives. + * @type RegExp + * @private + */ +soy.esc.$$FILTER_FOR_FILTER_NORMALIZE_URI_ = /^(?:(?:https?|mailto):|[^&:\/?#]*(?:[\/?#]|$))/i; + +/** + * A pattern that vets values produced by the named directives. + * @type RegExp + * @private + */ +soy.esc.$$FILTER_FOR_FILTER_HTML_ATTRIBUTES_ = /^(?!style|on|action|archive|background|cite|classid|codebase|data|dsync|href|longdesc|src|usemap)(?:[a-z0-9_$:-]*)$/i; + +/** + * A pattern that vets values produced by the named directives. + * @type RegExp + * @private + */ +soy.esc.$$FILTER_FOR_FILTER_HTML_ELEMENT_NAME_ = /^(?!script|style|title|textarea|xmp|no)[a-z0-9_$:-]*$/i; + +/** + * A helper for the Soy directive |escapeHtml + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$escapeHtmlHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_ESCAPE_HTML_, + soy.esc.$$REPLACER_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_); +}; + +/** + * A helper for the Soy directive |normalizeHtml + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$normalizeHtmlHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_NORMALIZE_HTML_, + soy.esc.$$REPLACER_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_); +}; + +/** + * A helper for the Soy directive |escapeHtmlNospace + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$escapeHtmlNospaceHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_ESCAPE_HTML_NOSPACE_, + soy.esc.$$REPLACER_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_); +}; + +/** + * A helper for the Soy directive |normalizeHtmlNospace + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$normalizeHtmlNospaceHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_NORMALIZE_HTML_NOSPACE_, + soy.esc.$$REPLACER_FOR_ESCAPE_HTML__AND__NORMALIZE_HTML__AND__ESCAPE_HTML_NOSPACE__AND__NORMALIZE_HTML_NOSPACE_); +}; + +/** + * A helper for the Soy directive |escapeJsString + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$escapeJsStringHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_ESCAPE_JS_STRING_, + soy.esc.$$REPLACER_FOR_ESCAPE_JS_STRING__AND__ESCAPE_JS_REGEX_); +}; + +/** + * A helper for the Soy directive |escapeJsRegex + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$escapeJsRegexHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_ESCAPE_JS_REGEX_, + soy.esc.$$REPLACER_FOR_ESCAPE_JS_STRING__AND__ESCAPE_JS_REGEX_); +}; + +/** + * A helper for the Soy directive |escapeCssString + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$escapeCssStringHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_ESCAPE_CSS_STRING_, + soy.esc.$$REPLACER_FOR_ESCAPE_CSS_STRING_); +}; + +/** + * A helper for the Soy directive |filterCssValue + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$filterCssValueHelper = function(value) { + var str = String(value); + if (!soy.esc.$$FILTER_FOR_FILTER_CSS_VALUE_.test(str)) { + return 'zSoyz'; + } + return str; +}; + +/** + * A helper for the Soy directive |normalizeUri + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$normalizeUriHelper = function(value) { + var str = String(value); + return str.replace( + soy.esc.$$MATCHER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_, + soy.esc.$$REPLACER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_); +}; + +/** + * A helper for the Soy directive |filterNormalizeUri + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$filterNormalizeUriHelper = function(value) { + var str = String(value); + if (!soy.esc.$$FILTER_FOR_FILTER_NORMALIZE_URI_.test(str)) { + return '#zSoyz'; + } + return str.replace( + soy.esc.$$MATCHER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_, + soy.esc.$$REPLACER_FOR_NORMALIZE_URI__AND__FILTER_NORMALIZE_URI_); +}; + +/** + * A helper for the Soy directive |filterHtmlAttributes + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$filterHtmlAttributesHelper = function(value) { + var str = String(value); + if (!soy.esc.$$FILTER_FOR_FILTER_HTML_ATTRIBUTES_.test(str)) { + return 'zSoyz'; + } + return str; +}; + +/** + * A helper for the Soy directive |filterHtmlElementName + * @param {*} value Can be of any type but will be coerced to a string. + * @return {string} The escaped text. + */ +soy.esc.$$filterHtmlElementNameHelper = function(value) { + var str = String(value); + if (!soy.esc.$$FILTER_FOR_FILTER_HTML_ELEMENT_NAME_.test(str)) { + return 'zSoyz'; + } + return str; +}; + +/** + * Matches all tags, HTML comments, and DOCTYPEs in tag soup HTML. + * By removing these, and replacing any '<' or '>' characters with + * entities we guarantee that the result can be embedded into a + * an attribute without introducing a tag boundary. + * + * @type {RegExp} + * @private + */ +soy.esc.$$HTML_TAG_REGEX_ = /<(?:!|\/?([a-zA-Z][a-zA-Z0-9:\-]*))(?:[^>'"]|"[^"]*"|'[^']*')*>/g; + +/** + * Matches all occurrences of '<'. + * + * @type {RegExp} + * @private + */ +soy.esc.$$LT_REGEX_ = /} + * @private + */ +soy.esc.$$SAFE_TAG_WHITELIST_ = {'b': 1, 'br': 1, 'em': 1, 'i': 1, 's': 1, 'sub': 1, 'sup': 1, 'u': 1}; + +// END GENERATED CODE diff --git a/apps/plane/style.css b/demos/plane/style.css similarity index 80% rename from apps/plane/style.css rename to demos/plane/style.css index 2976a60ba..ea30d90ea 100644 --- a/apps/plane/style.css +++ b/demos/plane/style.css @@ -1,3 +1,18 @@ +body { + background-color: #fff; + font-family: sans-serif; + margin-top: 0; +} +h1 { + font-weight: normal; + font-size: 140%; +} +.farSide { + text-align: right; +} +html[dir="RTL"] .farSide { + text-align: left; +} .tab { padding: 6px 12px; text-decoration: none; diff --git a/apps/plane/template.soy b/demos/plane/template.soy similarity index 94% rename from apps/plane/template.soy rename to demos/plane/template.soy index c41b2e598..444ccf8cb 100644 --- a/apps/plane/template.soy +++ b/demos/plane/template.soy @@ -3,17 +3,13 @@ /** * This is a Closure Template. * - * To regenerate just en.js, run this command: - * java -jar ../_soy/SoyToJsSrcCompiler.jar --outputPathFormat generated/en.js --srcs ../common.soy,template.soy - * - * To regenerate all files, see: trunk/apps/common.soy + * See the README.txt for details. */ /** * Translated messages for use in JavaScript. */ {template .messages} - {call apps.messages /}
    {msg meaning="Plane.rows" desc="page text - Total number of rows of seats on an airplane.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero."}Rows: %1{/msg} {msg meaning="Plane.getRows" desc="block text - The number of rows on the airplane, to be used in a mathematical equation, such as: 'seats = 4 x '''rows (5)''''.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero."}rows (%1){/msg} @@ -35,10 +31,9 @@
    -

    +

    Blockly >{sp} + Demos >{sp} - {msg meaning="Apps.blocklyMessage" desc="IBID"}Blockly{/msg} - {sp}:{sp} {msg meaning="Plane.plane" desc="title - Specifies that this is Blockly's '''Plane''' (airplane) tutorial. The word 'plane' was chosen over 'airplane' in English because it is shorter and less formal."} Plane Seat Calculator {/msg} @@ -64,7 +59,7 @@

    - + - + {call .toolbox /}
    diff --git a/demos/plane/xlf/extracted_msgs.xlf b/demos/plane/xlf/extracted_msgs.xlf new file mode 100644 index 000000000..6a4fd44ff --- /dev/null +++ b/demos/plane/xlf/extracted_msgs.xlf @@ -0,0 +1,77 @@ + + + + + + Rows: %1 + page text - Total number of rows of seats on an airplane.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero. + Plane.rows + + + seats = + block text - The first half of a mathematical equation determining the number of seats in an airplane, such as: ''''seats =''' 4 x rows'. + Plane.setSeats + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3 this level], there are three types of seats on this plane. Be sure to use the same terms for '1st class' and '2nd class' as you did for the earlier messages. + Plane.description3 + + + ? + page text - A word or symbol indicating that this numeric value has not yet been determined. + Plane.placeholder + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + page text - This text appears below the airplane graphic and above the space for the user to create the formula. The number of rows an the graphic may be changed by the user with a slider. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=1] for a picture. + Plane.instructions + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=2 this level], there are two types of seats on this plane. + Plane.description2 + + + 1st class rows (%1) + block text - The number of rows of first-class seats on the, to be used in a mathematical equation. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of first-class seats on an airplane. It is always an integer greater than or equal to zero. + Plane.getRows1 + + + 2nd class rows: %1 + page text - The number of rows of second-class seats on the airplane. %1 is an integer greater or equal to zero. See [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of second-class seats on an airplane. It is always an integer greater than or equal to zero. + Plane.rows2 + + + Seats: %1 + page text - The total number of seats on the airplane.\n\nParameters:\n* %1 - number of seats on an airplane. It is always either the next message or an integer greater than or equal to zero. + Plane.seats + + + Plane Seat Calculator + title - Specifies that this is Blockly's '''Plane''' (airplane) tutorial. The word 'plane' was chosen over 'airplane' in English because it is shorter and less formal. + Plane.plane + + + rows (%1) + block text - The number of rows on the airplane, to be used in a mathematical equation, such as: 'seats = 4 x '''rows (5)''''.\n\nParameters:\n* %1 - number of rows of seats on an airplane. It is always an integer greater than or equal to zero. + Plane.getRows + + + 1st class rows: %1 + page text - The number of rows of first-class seats on the airplane. You can see the block at [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=3].\n\nParameters:\n* %1 - number of rows of first-class seats on an airplane. It is always an integer greater than or equal to zero. + Plane.rows1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + instructions - Note that in [http://blockly-share.appspot.com/static/apps/plane/plane.html?lang=en&level=1 this level], there is only one type of seat on the plane. + Plane.description1 + + + 2nd class rows (%1) + block text - The number of rows of second-class (also called 'economy class') seats on the airplane, to be used in a mathematical expression.\n\nParameters:\n* %1 - number of rows of second-class seats on an airplane. It is always an integer greater than or equal to zero. + Plane.getRows2 + + + + diff --git a/demos/plane/xlf/translated_msgs_ar.xlf b/demos/plane/xlf/translated_msgs_ar.xlf new file mode 100644 index 000000000..c9b8e1689 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ar.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + الصفوف: %1 + + + seats = + المقاعد = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + طائرة بمقعدين في مقطورة الطيّار (للطيار ومساعده) وعدد من المقاعد في صفوف الدرجة الأولى والثانية. كل صف من صفوف الدرجة الأولى يحتوي على أربعة مقاعد. ويحتوي كل صف في الدرجة الثانية على خمسة مقاعد. + + + ? + ؟ + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + لبناء صيغة (أدناه) تقوم بحساب إجمالي عدد المقاعد في الطائرة عند تغيير الصفوف (أعلاه). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + طائرة بمقعدين في مقطورة الطيّار (للطيار ومساعده) وعدد من الصفوف يحتوي كل صف على أربعة مقاعد. + + + 1st class rows (%1) + صفوف الطبقة الأولى (%1) + + + 2nd class rows: %1 + صفوف الفئة الثانية: %1 + + + Seats: %1 + المقاعد: %1 + + + Plane Seat Calculator + آلة حاسبة لمقعد الطائرة + + + rows (%1) + الصفوف (%1) + + + 1st class rows: %1 + صفوف الطبقة الأولى: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + هنالك طائرة تحتوي على عدد من صفوف مقاعد الركاب. كل صف يحتوي على أربعة مقاعد. + + + 2nd class rows (%1) + صفوف الفئة الثانية: (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_be-tarask.xlf b/demos/plane/xlf/translated_msgs_be-tarask.xlf new file mode 100644 index 000000000..4580b5f1d --- /dev/null +++ b/demos/plane/xlf/translated_msgs_be-tarask.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Радкоў: %1 + + + seats = + месцаў = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Самалёт мае два месцы ў кабіне экіпажа (пілот і другі пілот), і некалькі пасажырскіх шэрагаў месцаў 1-га кляса і 2-га кляса. Кожны шэраг 1-га кляса утрымлівае чатыры месцы. Кожны шэраг 2-га кляса ўтрымлівае пяць месцаў. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Пабудаваць формулу (ніжэй), якая падлічвае агульную колькасьць месцаў у самалёце пры зьмене радоў (гл. вышэй). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Самалёт мае два месцы ў кабіне экіпажа (пілот і другі пілот), і некалькі шэрагаў пасажырскіх сядзеньняў. Кожны шэраг утрымлівае чатыры месцы. + + + 1st class rows (%1) + радкі першага клясу (%1) + + + 2nd class rows: %1 + Радкі другога клясу: %1 + + + Seats: %1 + Месцаў: %1 + + + Plane Seat Calculator + Калькулятар месцаў у самалёце + + + rows (%1) + радкоў (%1) + + + 1st class rows: %1 + Радкі першага клясу: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Самалёт мае некалькі шэрагаў пасажырскіх сядзеньняў. Кожная шэраг утрымлівае чатыры месцы. + + + 2nd class rows (%1) + радкі другога клясу (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_br.xlf b/demos/plane/xlf/translated_msgs_br.xlf new file mode 100644 index 000000000..4a7fc0c26 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_br.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Renkennadoù : %1 + + + seats = + azezennoù = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + En un nijerez ez eus div azezenn el logell leviañ(evit al loman hag an eil loman), hag un toullad renkennadoù azezennoù tremenidi kentañ hag eil klas. Peder azezenn zo e pep renkennad kentañ klas. Pemp azezenn zo e pemp renkennad eil klas. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Sevel ur formulenn (amañ dindan) evit jediñ an niver a azezennoù en holl en nijerez pa vez kemmet an niver a renkennadoù (amañ a-us). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + En un nijerez ez eus div azezenn el logell leviañ(evit al loman hag an eil loman), hag ur toullad renkennadoù azezennoù evit an dremenidi. Peder azezenn zo e pep renkennad. + + + 1st class rows (%1) + Renkennadoù kentañ klas (%1) + + + 2nd class rows: %1 + Renkennadoù eil klas : %1 + + + Seats: %1 + Azezennoù : %1 + + + Plane Seat Calculator + Jederez azezenn nijerez + + + rows (%1) + renkennadoù (%1) + + + 1st class rows: %1 + Renkennadoù kentañ klas : %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un nijerez he deus un toullad renkennadoù azezennoù evit ar veajourien. Peder azezenn a zo e pep renkennad. + + + 2nd class rows (%1) + Renkennadoù eil klas (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ca.xlf b/demos/plane/xlf/translated_msgs_ca.xlf new file mode 100644 index 000000000..17dfe65e0 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ca.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Files: %1 + + + seats = + seients = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un avió té dos seients en la cabina de vol (pel pilot i copilot) i un nombre de files per seients de passatgers de primera classe i de segona classe. Cada fila de primera classe conté quatre seients. Cada fila de segona classe conté cinc seients. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Construïu una fórmula (a sota) que calculi el nombre total de seients de l'avió a mida que canviïn les files (a dalt). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un avió té dos seients en la cabina de vol (pel pilot i pel copilot) i un nombre de files de seients de passatgers. Cada fila conté quatre seients. + + + 1st class rows (%1) + files de primera classe (%1) + + + 2nd class rows: %1 + files de segona classe: %1 + + + Seats: %1 + Seients: %1 + + + Plane Seat Calculator + Calculadora de seients d'avió + + + rows (%1) + files (%1) + + + 1st class rows: %1 + files de primera classe: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un avió té un nombre de files de seients de passatgers. Cada fila conté quatre seients. + + + 2nd class rows (%1) + files de segona classe (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_da.xlf b/demos/plane/xlf/translated_msgs_da.xlf new file mode 100644 index 000000000..752fe24f5 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_da.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rækker: %1 + + + seats = + sæder = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Et fly har to pladser i cockpittet (til pilot og med-pilot), og et antal rækker af 1. klasses og 2. klasses passagersæder. Hver 1. klasses række indeholder fire sæder. Hver 2. klasses række indeholder fem sæder. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Opbyg en formel (nedenfor), der beregner det samlede antal pladser på flyet, hvis antal rækker ændres (ovenfor). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Et fly har to pladser i cockpittet (til pilot og med-pilot), og et antal rækker af passagersæder. Hver række indeholder fire sæder. + + + 1st class rows (%1) + 1. klasse rækker (%1) + + + 2nd class rows: %1 + 2. klasse rækker: %1 + + + Seats: %1 + Sæder: %1 + + + Plane Seat Calculator + Flysædelommeregner + + + rows (%1) + rækker (%1) + + + 1st class rows: %1 + 1. klasse rækker: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Et fly har et antal rækker af passagersæder. Hver række indeholder fire sæder. + + + 2nd class rows (%1) + 2. klasse rækker (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_de.xlf b/demos/plane/xlf/translated_msgs_de.xlf new file mode 100644 index 000000000..f06bc7725 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_de.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Reihen: %1 + + + seats = + Sitze = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Ein Flugzeug hat zwei Sitze im Pilotenstand (für den Piloten und Co-Piloten) und eine Anzahl an Reihen mit Passagiersitzen der 1. und 2. Klasse. Jede 1.-Klasse-Reihe enthält vier Sitze. Jede 2.-Klasse-Reihe enthält fünf Sitze. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Erstelle eine Formel (unten), die die gesamte Anzahl an Sitzen im Flugzeug berechnet, wenn die Reihen (oben) geändert werden. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Ein Flugzeug hat zwei Sitze im Pilotenstand (für den Piloten und Co-Piloten) und eine Anzahl an Reihen mit Passagiersitzen. Jede Reihe enthält vier Sitze. + + + 1st class rows (%1) + Reihen der 1. Klasse (%1) + + + 2nd class rows: %1 + Reihen der 2. Klasse: %1 + + + Seats: %1 + Sitze: %1 + + + Plane Seat Calculator + Flugzeugsitzrechner + + + rows (%1) + Reihen (%1) + + + 1st class rows: %1 + Reihen der 1. Klasse: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Ein Flugzeug hat eine Anzahl an Reihen mit Passagiersitzen. Jede Reihe enthält vier Sitze. + + + 2nd class rows (%1) + Reihen der 2. Klasse (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_el.xlf b/demos/plane/xlf/translated_msgs_el.xlf new file mode 100644 index 000000000..5acb291d2 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_el.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Σειρές: %1 + + + seats = + καθίσματα = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Ένα αεροπλάνο έχει δύο καθίσματα στον θάλαμο διακυβέρνησης (για τον κυβερνήτη και τον συγκυβερνήτη), καθώς και έναν αριθμό σειρών καθισμάτων για την 1η και 2η θέση. Κάθε σειρά της 1ης θέσης έχει τέσσερα καθίσματα και κάθε σειρά της 2ης θέσης έχει πέντε καθίσματα. + + + ? + ; + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Φτιάξε έναν τύπο (κάτω) που θα υπολογίζει τον συνολικό αριθμό καθισμάτων του αεροπλάνου καθώς αλλάζουν οι σειρές (πάνω). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Ένα αεροπλάνο έχει δύο καθίσματα στον θάλαμο διακυβέρνησης (για τον κυβερνήτη και τον συγκυβερνήτη), καθώς και έναν αριθμό από σειρές καθισμάτων επιβατών. Κάθε σειρά έχει τέσσερα καθίσματα. + + + 1st class rows (%1) + Σειρές 1ης θέσης (%1) + + + 2nd class rows: %1 + Σειρές 2ης θέσης: %1 + + + Seats: %1 + Καθίσματα: %1 + + + Plane Seat Calculator + Υπολογισμός Θέσεων Σε Αεροπλάνο + + + rows (%1) + σειρές (%1) + + + 1st class rows: %1 + Σειρές 1ης θέσης: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Ένα αεροπλάνο έχει έναν συγκεκριμένο αριθμό σειρών καθισμάτων επιβατών. Κάθε σειρά έχει τέσσερα καθίσματα. + + + 2nd class rows (%1) + Σειρές 2ης θέσης (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_en.xlf b/demos/plane/xlf/translated_msgs_en.xlf new file mode 100644 index 000000000..e471a0008 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_en.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rows: %1 + + + seats = + seats = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + + + 1st class rows (%1) + 1st class rows (%1) + + + 2nd class rows: %1 + 2nd class rows: %1 + + + Seats: %1 + Seats: %1 + + + Plane Seat Calculator + Plane Seat Calculator + + + rows (%1) + rows (%1) + + + 1st class rows: %1 + 1st class rows: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + An airplane has a number of rows of passenger seats. Each row contains four seats. + + + 2nd class rows (%1) + 2nd class rows (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_es.xlf b/demos/plane/xlf/translated_msgs_es.xlf new file mode 100644 index 000000000..e2022b5f1 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_es.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Filas: %1 + + + seats = + asientos = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un avión tiene dos asientos en la cabina de vuelo (para el piloto y co-piloto), y un número de filas de asientos para pasajeros de primera y segunda clase. Cada fila de la primera clase contiene cuatro asientos. Cada fila de la segunda clase contiene cinco asientos. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Construir una fórmula (abajo) que calcule el número total de asientos en el avión cuando las filas sean cambiadas (arriba). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un avión tiene dos asientos en la cabina de vuelo (para el piloto y co-piloto), y un número de filas de asientos de pasajeros. Cada fila contiene cuatro asientos. + + + 1st class rows (%1) + Filas de primera clase: (%1) + + + 2nd class rows: %1 + Filas de segunda clase: %1 + + + Seats: %1 + Asientos: %1 + + + Plane Seat Calculator + Calculadora de asientos de avión + + + rows (%1) + filas (%1) + + + 1st class rows: %1 + Filas de primera clase: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un avión  tiene un número de filas de asientos de pasajeros. Cada fila contiene cuatro asientos. + + + 2nd class rows (%1) + Filas de segunda clase: (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_fa.xlf b/demos/plane/xlf/translated_msgs_fa.xlf new file mode 100644 index 000000000..264ec3104 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_fa.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + ردیف: %1 + + + seats = + صندلی‌ها = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + یک هواپیما دو صندلی در کابین خلبان دارد (برای خلبان و کمک خلبان) و تهداد از صندلی‌ها مسافرین درجه یک و درجه دو. هر ردیف درجه یک شامل چهار صندلی است. هر ردیف درجه دو شامل پنج صندلی است. + + + ? + ؟ + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + یک فرمول بسازید (پایین) که تعداد کل صندلی‌های هواپیما با تغییر ردیف را حساب کند (بالا). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + یک هواپیما دو صندلی در عرشهٔ پرواز دارد (برای خلبان و کمک خلبان) و تعدادی صندلی مسافرین. هر ردیف شامل چهار صندلی است. + + + 1st class rows (%1) + اولین کلاس ردیف‌ها (%1) + + + 2nd class rows: %1 + دومین کلاس ردیف: %1 + + + Seats: %1 + صندلی‌ها: %1 + + + Plane Seat Calculator + محاسبه‌گر صندلی‌های هواپیما + + + rows (%1) + ردیف‌ها (%1) + + + 1st class rows: %1 + اولین ردیف کلاس: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + یک هواپیما تعداد از صندلی‌های مسافرین را دارد. هر ردیف شمال چهار صندلی است. + + + 2nd class rows (%1) + دومین کلاس ردیف‌ها (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_fr.xlf b/demos/plane/xlf/translated_msgs_fr.xlf new file mode 100644 index 000000000..9485da29b --- /dev/null +++ b/demos/plane/xlf/translated_msgs_fr.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rangées : %1 + + + seats = + sièges = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un avion a deux sièges dans la cabine de pilotage (pour le pilote et le copilote), et un certain nombre de rangées de sièges passager de première et seconde classes. Chaque rangée de première classe contient quatre sièges. Chaque rangée de seconde classe contient cinq sièges. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Construire une formule (ci-dessous) qui calcule le nombre total de sièges dans l’avion quand le nombre de rangées est modifié (ci-dessus). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un avion a deux sièges dans le poste de pilotage (pour le pilote et le copilote), et un certain nombre de rangées de sièges passager. Chaque rangée contient quatre sièges. + + + 1st class rows (%1) + rangées de première classe (%1) + + + 2nd class rows: %1 + rangées de seconde classe : %1 + + + Seats: %1 + Sièges : %1 + + + Plane Seat Calculator + Calculateur de sièges d’avion + + + rows (%1) + rangées (%1) + + + 1st class rows: %1 + rangées de première classe : %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un avion a un nombre de rangées de sièges passager. Chaque rangée contient quatre sièges. + + + 2nd class rows (%1) + rangées de seconde classe (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_he.xlf b/demos/plane/xlf/translated_msgs_he.xlf new file mode 100644 index 000000000..55ac148c5 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_he.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + שורות: %1 + + + seats = + מושבים = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + במטוס יש שני מושבים עבור הצוות (בשביל הטייס וטייס המשנה), ומספר שורות מושבים במחלקת הנוסעים הראשונה ובמחלקת הנוסעים השנייה. כל שורה במחלקה הראשונה מכילה ארבעה מושבים. כל שורה במחלקה השנייה מכילה חמישה מושבים. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + בנה נוסחה (למטה) אשר תחשב את סך כל המושבים במטוס בהתאם לשינוי מספר השורות (למעלה). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + במטוס יש שני מושבים עבור הצוות (בשביל הטייס וטייס המשנה), ומספר שורות עם מושבי נוסעים. בכל שורה יש ארבעה מושבים. + + + 1st class rows (%1) + שורות במחלקה ראשונה (%1) + + + 2nd class rows: %1 + שורות במחלקה שנייה: %1 + + + Seats: %1 + מושבים: %1 + + + Plane Seat Calculator + מחשבון מושב במטוס + + + rows (%1) + שורות (%1) + + + 1st class rows: %1 + שורות במחלקה ראשונה: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + במטוס יש מספר שורות עם מושבי נוסעים. בכל שורה יש ארבעה מושבים. + + + 2nd class rows (%1) + שורות במחלקה שנייה: (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_hrx.xlf b/demos/plane/xlf/translated_msgs_hrx.xlf new file mode 100644 index 000000000..263d30507 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_hrx.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Reihe: %1 + + + seats = + Sitze = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + En Fluchzeich hot zwooi Sitze im Pilotstand (für den Pilot und Co-Pilot) und en Oonzohl an Reihe mit Passagiersitze der 1. und 2. Klasse. Jede 1.-Klasse-Reih enthält vier Sitze. Jede 2.-Klasse-Reih enthält fünf Sitze. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Erstell en Formel (unne), die die gesamte Oonzohl an Sitze im Fluchzeich berechnet, wenn die Reihe (uwe) geännert sin. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + En Fluchzeich hot zwooi Sitze im Pilotestand (für den Pilot und Co-Pilot) und en Oonzohl an Reihe mit Passagiersitze. Jede Reih enthält vier Sitze. + + + 1st class rows (%1) + Reihe von der 1. Klasse (%1) + + + 2nd class rows: %1 + Reihe von der 2. Klasse: %1 + + + Seats: %1 + Sitz: %1 + + + Plane Seat Calculator + Fluchzeichsitzrechner + + + rows (%1) + Reihe (%1) + + + 1st class rows: %1 + Reihe von der 1. Klasse: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + En Fluchzeich hot en Oonzohl an Reihe mit Passagiersitze. Jede Reih enthält vier Sitze. + + + 2nd class rows (%1) + Reihe von der 2. Klasse (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_hu.xlf b/demos/plane/xlf/translated_msgs_hu.xlf new file mode 100644 index 000000000..c44d1aa9d --- /dev/null +++ b/demos/plane/xlf/translated_msgs_hu.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Sorok száma: %1 + + + seats = + Ülések száma = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Egy repülőgépnek 2 ülése van a pilótafülkében (a pilótának és a másodpilótának), az utasok 1. és 2. osztályon utazhatnak. Az 1. osztályon négy szék van egy sorban. A 2. osztályon öt szék van egy sorban. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Készítsd el a képletet (lent) amivel kiszámolható, hogy hány ülés van összesen a repülőgépen annak függvényében, ahogy (fent) állítod a sorok számát. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Egy repülőgépnek 2 ülése van a pilótafülkében (a pilótának és a másodpilótának), az utasok több sorban ülnek az utastérben. Az utastér minden sorában négy szék van. + + + 1st class rows (%1) + 1. osztály sorai (%1) + + + 2nd class rows: %1 + 2. osztály: %1 sor + + + Seats: %1 + Ülések száma összesen: %1 + + + Plane Seat Calculator + Repülőgép alkalmazás + + + rows (%1) + Sorok száma (%1) + + + 1st class rows: %1 + 1. osztály: %1 sor + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Egy repülőgépen az utasok több sorban ülnek az utastérben. Az utastér minden sorában négy szék van. + + + 2nd class rows (%1) + 2. osztály sorai (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ia.xlf b/demos/plane/xlf/translated_msgs_ia.xlf new file mode 100644 index 000000000..83ae2c6d2 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ia.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Filas: %1 + + + seats = + sedes = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un avion ha duo sedes in le cabina (pro le pilota e le copilota) e un numero de filas de sedes pro passageros del prime classe e del secunde classes. Cata fila del prime classe contine quatro sedes. Cata fila del secunde classe contine cinque sedes. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Construe un formula (ci infra) que calcula le numero total de sedes in le avion quando le numero de filas es cambiate (ci supra). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un avion ha duo sedes in le cabina (pro le pilota e le copilota) e un numero de filas de sedes pro passageros. Cata fila contine quatro sedes. + + + 1st class rows (%1) + filas de prime classe (%1) + + + 2nd class rows: %1 + Filas de secunde classe: %1 + + + Seats: %1 + Sedes: %1 + + + Plane Seat Calculator + Calculator de sedias de avion + + + rows (%1) + filas (%1) + + + 1st class rows: %1 + Filas de prime classe: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un avion ha un numero de filas de sedes pro passageros. Cata fila contine quatro sedes. + + + 2nd class rows (%1) + filas de secunde classe (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_is.xlf b/demos/plane/xlf/translated_msgs_is.xlf new file mode 100644 index 000000000..3810f4b34 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_is.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Raðir: %1 + + + seats = + sæti = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Flugvél er með tvö sæti í stjórnklefa (fyrir flugmanninn og aðstoðarflugmanninn) og einhvern fjölda sætaraða fyrir farþega á 1. og 2. farrými. Hver sætaröð á 1. farrými hefur fjögur sæti. Hver sætaröð á 2. farrými hefur fimm sæti. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Búðu til formúlu (hér fyrir neðan) sem reiknar heildarfjölda sæta í flugvélinni eftir því sem röðunum er breytt (hér fyrir ofan). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Flugvél er með tvö sæti í stjórnklefa (fyrir flugmanninn og aðstoðarflugmanninn) og einhvern fjölda sætaraða fyrir farþega. Hver sætaröð hefur fjögur sæti. + + + 1st class rows (%1) + raðir 1. farrými (%1) + + + 2nd class rows: %1 + Raðir 2. farrými: %1 + + + Seats: %1 + Sæti: %1 + + + Plane Seat Calculator + Flugsætareiknir + + + rows (%1) + raðir (%1) + + + 1st class rows: %1 + Raðir 1. farrými: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Flugvél er með einhvern fjölda sætaraða fyrir farþega. Í hverri röð eru fjögur sæti. + + + 2nd class rows (%1) + raðir 2. farrými (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_it.xlf b/demos/plane/xlf/translated_msgs_it.xlf new file mode 100644 index 000000000..27bad0dcf --- /dev/null +++ b/demos/plane/xlf/translated_msgs_it.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + File: %1 + + + seats = + sedili = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un aereo ha due posti nella cabina di pilotaggio (per il pilota e il co-pilota), e un numero di file in prima e seconda classe, con i posti a sedere dei passeggeri. Ogni fila della prima classe contiene quattro posti. Quelle invece della seconda classe, ne contengono cinque. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Costruisci una formula (sotto) che calcola il numero totale di posti a sedere su un aeroplano, così come cambiano le file di posti (sopra). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un aeroplano ha due posti a sedere nella cabina di pilotaggio (per il pilota e co-pilota), e un numero di file con i posti a sedere dei passeggeri. Ogni fila contiene quattro posti. + + + 1st class rows (%1) + file 1ª classe (%1) + + + 2nd class rows: %1 + File 2ª classe: %1 + + + Seats: %1 + Sedili: %1 + + + Plane Seat Calculator + Calcolo posti aereo + + + rows (%1) + file (%1) + + + 1st class rows: %1 + File 1ª classe: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un aeroplano ha un numero di file contenenti i posti a sedere dei passeggeri. Ogni fila, contiene quattro posti a sedere. + + + 2nd class rows (%1) + File 2ª classe (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ja.xlf b/demos/plane/xlf/translated_msgs_ja.xlf new file mode 100644 index 000000000..b04624a27 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ja.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + 列の数: %1 + + + seats = + 座席の数 = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + 飛行機には、操縦室の 2 つの座席 (操縦士と副操縦士) と、ファーストクラスとセカンドクラスの乗客の座席の列があります。それぞれの列に、ファーストクラスでは 4 つの座席、セカンドクラスでは 5 つの座席があります。 + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + 飛行機の座席の数を計算する式を、上で列の数を変更しても正しくなるように、下に入力してください。 + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + 飛行機には、操縦室の 2 つの座席 (操縦士と副操縦士) と、乗客の座席の列があります。それぞれの列に 4 つの座席があります。 + + + 1st class rows (%1) + ファーストクラスの列数 (%1) + + + 2nd class rows: %1 + セカンドクラスの列数: %1 + + + Seats: %1 + 座席の数: %1 + + + Plane Seat Calculator + 飛行機座席計算機 + + + rows (%1) + 列の数 (%1) + + + 1st class rows: %1 + ファーストクラスの列数: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + 飛行機に乗客の座席の列があります。それぞれの列に 4 つの座席があります。 + + + 2nd class rows (%1) + セカンドクラスの列数 (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ko.xlf b/demos/plane/xlf/translated_msgs_ko.xlf new file mode 100644 index 000000000..07e23288e --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ko.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + 행 수: %1 + + + seats = + 좌석수 = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + 비행기는 비행 갑판(조종사와 부조종사용)에서 좌석 두 개가 있고, 1등석과 2등석 승객 좌석의 행 수가 있습니다. 각 1등석 행에는 시트 네 개가 포함되어 있습니다. 각 2등석 행에는 시트 다섯 개가 포함되어 있습니다. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + 행이 바뀐(위) 비행기에 좌석의 총 수를 계산하는 공식(아래)을 구축하세요. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + 비행기는 비행 갑판(조종사와 부조종사용)에서 좌석 두 개가 있고, 승객 좌석의 행 수가 있습니다. 각 행에는 시트 네 개가 포함되어 있습니다. + + + 1st class rows (%1) + 1등석 행 수 (%1) + + + 2nd class rows: %1 + 2등석 행 수: %1 + + + Seats: %1 + 좌석 수: %1 + + + Plane Seat Calculator + 비행기 좌석 계산기 + + + rows (%1) + 행 수 (%1) + + + 1st class rows: %1 + 1등석 행 수: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + 비행기는 승객 좌석의 행 수가 있습니다. 각 행에는 시트 네 개가 포함되어 있습니다. + + + 2nd class rows (%1) + 2등석 행 수 (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ms.xlf b/demos/plane/xlf/translated_msgs_ms.xlf new file mode 100644 index 000000000..4c993a978 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ms.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Baris: %1 + + + seats = + tempat duduk = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Sebuah kapal terbnag mempunyai tempat duduk di kokpit (untuk juruterbang dan pembantunya) dan sebilangan baris tempat duduk penumpang kelas pertama dan kelas kedua. Setiap baris kelas pertama mengandungi empat tempat duduk. Setiap baris kelas pertama mengandungi lima tempat duduk. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Wujudkan formula (di bawah) yang mengira jumlah tempat duduk di dalam kapal terbang sedangkan baris-barisnya diubah (di atas). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Sebuah kapal terbnag mempunyai tempat duduk di kokpit (untuk juruterbang dan pembantunya) dan sebilangan baris tempat duduk penumpang. Setiap baris mengandungi empat tempat duduk. + + + 1st class rows (%1) + baris kelas pertama (%1) + + + 2nd class rows: %1 + Baris kelas ke-2: %1 + + + Seats: %1 + Tempat duduk: %1 + + + Plane Seat Calculator + Pengira Tempat Duduk Kapal Terbang + + + rows (%1) + baris (%1) + + + 1st class rows: %1 + Baris kelas pertama: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Sebuah kapal terbang mempunyai sebilangan baris tempat duduk penumpang. Setiap baris mengandungi empat tempat duduk. + + + 2nd class rows (%1) + baris kelas ke-2 (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_nb.xlf b/demos/plane/xlf/translated_msgs_nb.xlf new file mode 100644 index 000000000..99c9c6a99 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_nb.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rader: %1 + + + seats = + seter = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Et fly har to seter i cockpit (for piloten og andrepiloten), og et antall rader med passasjerseter på første og andre klasse. Hver av radene på første klasse har fire seter. Hver av radene på andre klasse har fem seter. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Bygg en formel (under) som beregner det totale antall seter på flyet etter hvert som radene endres (over). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Et fly har to seter i cockpit (for piloten og andrepiloten), og et antall rader med passasjerseter. Hver rad inneholder fire seter. + + + 1st class rows (%1) + Rader i første klasse (%1) + + + 2nd class rows: %1 + Rader i andre klasse: %1 + + + Seats: %1 + Seter: %1 + + + Plane Seat Calculator + Flysetekalkulator + + + rows (%1) + rader (%1) + + + 1st class rows: %1 + Rader i første klasse: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Et fly har et antall rader med passasjerseter. Hver rad inneholder fire seter. + + + 2nd class rows (%1) + Rader i andre klasse (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_nl.xlf b/demos/plane/xlf/translated_msgs_nl.xlf new file mode 100644 index 000000000..6f36fa026 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_nl.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rijen: %1 + + + seats = + stoelen= + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Een vliegtuig heeft twee stoelen in de cockpit (voor de piloot en de copiloot) en een aantal rijen voor 1e klasse en 2e klasse passagiers. Iedere rij in de 1e klasse heeft vier stoelen. Iedere rij in de 2e klasse heeft vijf stoelen. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Maak hieronder een formule die het totale aantal stoelen in het vliegtuig berekent als het aantal rijen hierboven wordt aangepast. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Een vliegtuig heeft twee stoelen in de cockpit (voor de piloot en de copiloot) en een aantal rijen met stoelen voor passagiers. Iedere rij bevat vier stoelen. + + + 1st class rows (%1) + Rijen 1e klas (%1) + + + 2nd class rows: %1 + Rijen 2e klas: %1 + + + Seats: %1 + Zitplaatsen: %1 + + + Plane Seat Calculator + Vliegtuigstoelencalculator + + + rows (%1) + rijen (%1) + + + 1st class rows: %1 + Rijen 1e klas: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Een vliegtuig heeft een aantal rijen met stoelen. Iedere rij heeft vier stoelen. + + + 2nd class rows (%1) + Rijen 2e klas (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_pl.xlf b/demos/plane/xlf/translated_msgs_pl.xlf new file mode 100644 index 000000000..4c8b044e2 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_pl.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rzędów: %1 + + + seats = + siedzeń = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Samolot ma dwa miejsca w kabinie pilotów (dla pierwszego i drugiego pilota) oraz rzędy siedzeń dla pasażerów pierwszej i drugiej klasy. Każdy rząd pierwszej klasy składa się z czterech siedzeń. Każdy rząd drugiej klasy składa się z pięciu siedzeń. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Zbuduj wzór (poniżej), który pozwala obliczyć łączną liczbę siedzeń w samolocie w funkcji zmieniającej się liczby rzędów (powyżej). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Samolot ma dwa miejsca w kabinie pilotów (dla pierwszego i drugiego pilota) oraz rzędy siedzeń dla pasażerów. Każdy taki rząd składa się z czterech siedzeń. + + + 1st class rows (%1) + Rzędów w pierwszej klasie (%1) + + + 2nd class rows: %1 + Rzędów w drugiej klasie: %1 + + + Seats: %1 + Siedzeń: %1 + + + Plane Seat Calculator + Kalkulator miejsc w samolocie. + + + rows (%1) + rzędów (%1) + + + 1st class rows: %1 + Rzędów w pierwszej klasie: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Samolot ma kilka rzędów siedzeń pasażerów. Każdy rząd zawiera cztery miejsca. + + + 2nd class rows (%1) + Rzędów w drugiej klasie (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_pms.xlf b/demos/plane/xlf/translated_msgs_pms.xlf new file mode 100644 index 000000000..0fef91217 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_pms.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Linie: %1 + + + seats = + sedij = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + N'avion a l'ha doi sedij ant la cabin-a ëd pilotage (për ël pilòta e ël cò-pilòta) e un chèich nùmer ëd file ëd sedij pr'ij passagé ëd prima e sconda classa. Minca fila ëd prima classa a conten quatr sedij. Minca fila ëd seconda classa a conten sinch sedij. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Fabriché na fórmola (sì-sota) ch'a fa 'l cont dël nùmer total ëd sedij ant l'avion cand che ël nùmer dle file a cangia (sì-dzora). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + N'avion a l'ha doi sedij ant la cabin-a ëd pilotage (për ël pilòta e ël cò-pilòta), e un chèich nùmer ëd file ëd sedij pr'ij passagé. Minca fila a conten quatr sedij. + + + 1st class rows (%1) + linie ëd prima classa (%1) + + + 2nd class rows: %1 + linie ëd seconda classa: %1 + + + Seats: %1 + Sedij: %1 + + + Plane Seat Calculator + Calcolator ëd sedij d'avion + + + rows (%1) + linie (%1) + + + 1st class rows: %1 + linie ëd prima classa: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + N'avion a l'ha un nùmer ëd file ëd sedij da passëgé. Minca fila a l'ha quatr sedij. + + + 2nd class rows (%1) + linie ëd seconda classa (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_pt-br.xlf b/demos/plane/xlf/translated_msgs_pt-br.xlf new file mode 100644 index 000000000..7bdd9ccff --- /dev/null +++ b/demos/plane/xlf/translated_msgs_pt-br.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Filas: %1 + + + seats = + assentos = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Um avião tem dois assentos na cabine de comando (para o piloto e o copiloto) e um número de filas de assentos na primeira e na segunda classe. Cada fila da primeira classe contém quatro assentos. Cada fila da segunda classe contém cinco assentos. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Elabore uma fórmula (abaixo) que calcule o número total de assentos no avião a medida que as filas são alteradas (acima). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Um avião tem dois assentos na cabine de comando (para o piloto e o copiloto) e um número de filas de assentos para os passageiros. Cada fila contém quatro assentos. + + + 1st class rows (%1) + filas na primeira classe (%1) + + + 2nd class rows: %1 + filas na segunda classe: %1 + + + Seats: %1 + Assentos: %1 + + + Plane Seat Calculator + Calculadora de Assentos em Avião + + + rows (%1) + filas (%1) + + + 1st class rows: %1 + filas na primeira classe: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Um avião tem um número de filas de assentos para os passageiros. Cada fila contém quatro assentos. + + + 2nd class rows (%1) + filas na segunda classe (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ro.xlf b/demos/plane/xlf/translated_msgs_ro.xlf new file mode 100644 index 000000000..614a3bda2 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ro.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rânduri: %1 + + + seats = + scaune = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Un avion are două scaune în carlingă (pentru pilot și copilot) și un număr de rânduri cu scaune de clasa I și clasa a II-a pentru pasageri. Fiecare rând de clasa I conține patru scaune. Fiecare rând de clasa a II-a conține cinci scaune. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Construiește o formulă (mai jos) care calculează numărul total de locuri dintr-un avion în timp ce rândurile se schimbă (mai sus). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Un avion are două scaune în carlingă (pentru pilot și copilot) și un număr de rânduri cu scaune pentru pasageri. Fiecare rând conține patru scaune. + + + 1st class rows (%1) + rânduri de clasa I (%1) + + + 2nd class rows: %1 + rânduri de clasa a II-a: %1 + + + Seats: %1 + Scaune: %1 + + + Plane Seat Calculator + Calculator pentru locurile dintr-un avion + + + rows (%1) + rânduri (%1) + + + 1st class rows: %1 + rânduri de clasa I: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Un avion are un număr de rânduri cu scaune pentru pasageri. Fiecare rând conține patru scaune. + + + 2nd class rows (%1) + rânduri de clasa a II-a (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_ru.xlf b/demos/plane/xlf/translated_msgs_ru.xlf new file mode 100644 index 000000000..d25b25458 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_ru.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Рядов: %1 + + + seats = + места = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + В самолёте 2 места для пилота и его помощника, несколько рядов с пассажирскими местами первого класса, а также несколько рядов с пассажирскими местами второго класса. В каждом ряду первого класса 4 места. В каждом ряду второго класса 5 мест. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Постройте формулу в области ниже, которая поможет рассчитать общее количество мест в самолёте (как на рисунке выше). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + В самолёте 2 места для пилота и его помощника, а также несколько рядов с пассажирскими местами. В каждом ряду 4 места. + + + 1st class rows (%1) + ряды 1-го класса (%1) + + + 2nd class rows: %1 + Рядов 2-го класса: %1 + + + Seats: %1 + Мест: %1 + + + Plane Seat Calculator + Калькулятор посадочных мест в самолёте + + + rows (%1) + ряды (%1) + + + 1st class rows: %1 + Рядов 1-го класса: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + В самолёте несколько рядов с пассажирскими местами. В каждом ряду 4 места. + + + 2nd class rows (%1) + ряды 2-го класса (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_sc.xlf b/demos/plane/xlf/translated_msgs_sc.xlf new file mode 100644 index 000000000..632812356 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_sc.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Fileras: %1 + + + seats = + cadironis = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Unu aparèchiu tenit duus cadironis in sa cabina de cumandu (po su pilota e su co-pilota), e unas cantu fileras de cadironis po passigeris de prima classi e de segunda classi. Dònnia filera de prima classi tenit cuatru cadironis. Dònnia filera de segunda classi tenit cincu cadironis. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Cuncorda una formula (innoi asuta) chi cumpudit su numeru totali de postus a setzi in s'aparechiu, a segunda de comenti mudant is fileras de postus (innoi in susu) + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Unu aparèchiu tenit duus cadironis in sa cabina de cumandu (po su pilota e su co-pilota), e unas cantu fileras de cadironis po passigeris. Dònnia filera tenit cuatru cadironis. + + + 1st class rows (%1) + fileras de primu classi (%1) + + + 2nd class rows: %1 + fileras de segunda classi: %1 + + + Seats: %1 + Cadironis: %1 + + + Plane Seat Calculator + Fai su contu de is cadironis de unu aparèchiu + + + rows (%1) + fileras (%1) + + + 1st class rows: %1 + fileras de primu classi: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Unu aparèchiu tenit unas cantu fileras de cadironis po passigeris. Dònnia filera tenit cuatru cadironis. + + + 2nd class rows (%1) + fileras de segunda classi (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_sv.xlf b/demos/plane/xlf/translated_msgs_sv.xlf new file mode 100644 index 000000000..f3d836fba --- /dev/null +++ b/demos/plane/xlf/translated_msgs_sv.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Rader: %1 + + + seats = + säten = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Ett flygplan har två säten i cockpiten (ett för piloten och ett för andrepiloten) och ett antal rader med passagerarsäten i första och andra klass. Varje rad i första klass innehåller fyra säten. Varje rad i andra klass innehåller fem säten. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Bygg en formel (nedan) som beräknar det totala antalet säten på flygplanet när raderna ändras (ovan). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Ett flygplan har två säten i cockpiten (ett för piloten och ett för andrepiloten) och ett antal rader med passagerarsäten. Varje rad innehåller fyra säten. + + + 1st class rows (%1) + Rader i första klass (%1) + + + 2nd class rows: %1 + Rader i andra klass: %1 + + + Seats: %1 + Säten: %1 + + + Plane Seat Calculator + Plansäteskalkylator + + + rows (%1) + rader (%1) + + + 1st class rows: %1 + Rader i första klass: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Ett flygplan har ett antal rader med passagerarsäten. Varje rad innehåller fyra säten. + + + 2nd class rows (%1) + Rader i andra klass (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_th.xlf b/demos/plane/xlf/translated_msgs_th.xlf new file mode 100644 index 000000000..0967d4d19 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_th.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + %1 แถว + + + seats = + จำนวนที่นั่ง = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + ภายในเครื่องบินจะมีที่นั่งนักบินอยู่ 2 ที่ (สำหรับนักบิน และผู้ช่วยนักบิน) และจะมีแถวที่นั่งสำหรับผู้โดยสาร "ชั้นเฟิร์สคลาส" และ "ชั้นธุรกิจ" อยู่จำนวนหนึ่ง โดยในชั้นเฟิร์สคลาสจะมีแถวละ 4 ที่นั่ง ส่วนในชั้นธุรกิจจะมีแถวละ 5 ที่นั่ง + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + สร้างสูตรคำนวณ (ด้านล่าง) เพื่อคำนวณหาจำนวนที่นั่งทั้งหมดบนเครื่องบิน ตามจำนวนแถวที่เปลี่ยนไป (ด้านบน) + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + ภายในเครื่องบินจะมีที่นั่งนักบินอยู่ 2 ที่ (สำหรับนักบิน และผู้ช่วยนักบิน) และมีแถวที่นั่งผู้โดยสารอยู่จำนวนหนึ่ง ในแต่ละแถวจะมี 4 ที่นั่ง + + + 1st class rows (%1) + จำนวนแถวชั้นเฟิร์สคลาส (%1) + + + 2nd class rows: %1 + ชั้นธุรกิจ %1 แถว + + + Seats: %1 + คำนวณได้ทั้งหมด %1 ที่นั่ง + + + Plane Seat Calculator + ระบบคำนวณที่นั่งบนเครื่องบิน + + + rows (%1) + จำนวนแถว (%1) + + + 1st class rows: %1 + ชั้นเฟิร์สคลาส %1 แถว + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + ภายในเครื่องบินประกอบไปด้วยแถวของที่นั่งผู้โดยสาร ในแต่ละแถวจะมี 4 ที่นั่ง + + + 2nd class rows (%1) + จำนวนแถวชั้นธุรกิจ (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_tr.xlf b/demos/plane/xlf/translated_msgs_tr.xlf new file mode 100644 index 000000000..678541a32 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_tr.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Sıralar: %1 + + + seats = + koltuklar = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Bir uçağın uçuş güvertesinde iki koltuğu (pilot ve yardımcı pilot için), ve belirli sayıda birinci sınıf ve ikinci sınıf yolcu koltuğu sırası vardır. Her birinci sınıf sıra dört koltuk içerir. Her ikinci sınıf sıra beş koltuk içerir. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Sıralar(üstte) değiştikçe uçaktaki toplam koltuk sayısını hesaplayan bir formül(altta) oluşturun. + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Bir uçağın uçuş güvertesinde iki koltuğu (pilot ve yardımcı pilot için), ve belirli sayıda koltuk sırası vardır. Her sıra dört koltuk içerir. + + + 1st class rows (%1) + Birinci sınıf sıralar (%1) + + + 2nd class rows: %1 + İkinci sınıf sıralar: %1 + + + Seats: %1 + Koltuklar: %1 + + + Plane Seat Calculator + Uçak Koltuğu Hesaplayıcı + + + rows (%1) + sıralar (%1) + + + 1st class rows: %1 + Birinci sınıf sıralar: (%1) + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Bir uçağın belirli sayıda koltuk sırası vardır. Her sıra dört koltuk içerir. + + + 2nd class rows (%1) + İkinci sınıf sıralar (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_uk.xlf b/demos/plane/xlf/translated_msgs_uk.xlf new file mode 100644 index 000000000..d5e7682a5 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_uk.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Рядки: %1 + + + seats = + місць= + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Літак має два місця в кабіні екіпажу (пілот і другий пілот), і кілька рядів 1-го класу 2-го класу пасажирських місць. Кожний ряд 1-го класу містить чотири місця. Кожен ряд 2-го класу містить п'ять місць. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Побудувати формулу (нижче), яка обчислює кількість місць на літаку при зміні рядків (див. вище). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Літак має два місця в кабіні екіпажу (пілот і другий пілот), і кілька рядів пасажирських сидінь. Кожен рядок містить чотири місця. + + + 1st class rows (%1) + рядів 1-го класу (%1) + + + 2nd class rows: %1 + рядів 2-го класу: %1 + + + Seats: %1 + Місць: %1 + + + Plane Seat Calculator + Калькулятор місць у літаку + + + rows (%1) + рядки (%1) + + + 1st class rows: %1 + рядів 1-го класу: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Літак має кілька рядів пасажирських сидінь. Кожен ряд містить чотири місця. + + + 2nd class rows (%1) + рядів 2-го класу (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_vi.xlf b/demos/plane/xlf/translated_msgs_vi.xlf new file mode 100644 index 000000000..1f4ef6fcf --- /dev/null +++ b/demos/plane/xlf/translated_msgs_vi.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + Số hàng ghế: %1 + + + seats = + Tính số chỗ ngồi = + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + Một chiếc máy bay này có hai chỗ ngồi ở sàn (cho phi công trưởng và phi công phó), và một số hàng ghế hạng 1 và hạng 2. Mỗi hàng hạng 1 có bốn chỗ ngồi. Mỗi hàng hạng 2 có năm chỗ ngồi. + + + ? + ? + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + Dưới đây hãy tạo công thức tính số chỗ ngồi trên máy bay để nó thay đổi tùy theo số lượng hàng ghế (hình trên). + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + Một máy bay có hai ghế trong buồng lái (dành cho phi công trưởng và phi công phụ), và một loạt hàng ghế cho hành khách. Mỗi hàng có bốn ghế (bốn chỗ ngồi). + + + 1st class rows (%1) + số hàng hạng nhất (%1) + + + 2nd class rows: %1 + Hàng hạng hai: %1 + + + Seats: %1 + Số chỗ ngồi: %1 + + + Plane Seat Calculator + Máy bay ghế máy tính + + + rows (%1) + đếm số hàng ghế (%1) + + + 1st class rows: %1 + Hàng hạng nhất: %1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + Máy bay có một số hàng ghế hành khách. Mỗi hàng có bốn chỗ ngồi. + + + 2nd class rows (%1) + số hàng hạng hai (%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_zh-hans.xlf b/demos/plane/xlf/translated_msgs_zh-hans.xlf new file mode 100644 index 000000000..2cbb7e858 --- /dev/null +++ b/demos/plane/xlf/translated_msgs_zh-hans.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + 行:%1 + + + seats = + 座位= + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + 一架飞机除了有两个座位供正副驾驶员,还有一定量行数的头等及经济乘客座位。头等每行共四座,经济每行共五座。 + + + ? + + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + 于下方写出一条公式以计算飞机上的座位总数。 + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + 一架飞机除了有两个座位供正副驾驶员,还有一定量行数的乘客座位。每行共四座。 + + + 1st class rows (%1) + 头等行(%1) + + + 2nd class rows: %1 + 经济等行:%1 + + + Seats: %1 + 座位:%1 + + + Plane Seat Calculator + 飞机座位计算器 + + + rows (%1) + 行 (%1) + + + 1st class rows: %1 + 头等行:%1 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + 一架飞机有一定量行数的乘客座位,每行共四座。 + + + 2nd class rows (%1) + 经济等行(%1) + + + + diff --git a/demos/plane/xlf/translated_msgs_zh-hant.xlf b/demos/plane/xlf/translated_msgs_zh-hant.xlf new file mode 100644 index 000000000..2dadf6d4e --- /dev/null +++ b/demos/plane/xlf/translated_msgs_zh-hant.xlf @@ -0,0 +1,63 @@ + + + + + + Rows: %1 + 排:%1 + + + seats = + 座位= + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of 1st class and 2nd class passenger seats. Each 1st class row contains four seats. Each 2nd class row contains five seats. + 一架飛機除了有兩個座位供正副機師,還有一定量行數的頭等及經濟乘客座位。頭等艙每排都包含四個席位,經濟艙每排都包含五個席位。。 + + + ? + + + + Build a formula (below) that calculates the total number of seats on the airplane as the rows are changed (above). + 於下方寫出一條公式以計算飛機上的座位總數。 + + + An airplane has two seats in the flight deck (for the pilot and co-pilot), and a number of rows of passenger seats. Each row contains four seats. + 一架飛機除了有兩個座位供正副機師,還有一定量行數的乘客座位。每排都包含四個席位。 + + + 1st class rows (%1) + 頭等艙(%1) + + + 2nd class rows: %1 + 經濟艙:%1 排 + + + Seats: %1 + 座位:%1 + + + Plane Seat Calculator + 飛機座位計算器 + + + rows (%1) + 排(%1) + + + 1st class rows: %1 + 頭等艙:%1 排 + + + An airplane has a number of rows of passenger seats. Each row contains four seats. + 一架飛機有一定量行數的乘客座位,每排都包含四個席位。 + + + 2nd class rows (%1) + 經濟艙(%1) + + + +