Merge branch 'master' into production

This commit is contained in:
Nick Winter 2015-01-29 11:27:21 -08:00
commit a050917985
67 changed files with 148 additions and 257 deletions

View file

@ -79,6 +79,7 @@ module.exports = class CocoRouter extends Backbone.Router
'i18n/component/:handle': go('i18n/I18NEditComponentView')
'i18n/level/:handle': go('i18n/I18NEditLevelView')
'i18n/achievement/:handle': go('i18n/I18NEditAchievementView')
'i18n/campaign/:handle': go('i18n/I18NEditCampaignView')
'legal': go('LegalView')

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "العربية", englishDescription: "Arabi
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "български език", englishDescri
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
buy_gems: "Купи скъпоценни камъни"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Català", englishDescription: "Catalan", tr
change_hero: "Canviar heroi" # Go back from choose inventory to choose hero
choose_inventory: "Equipar objectes"
buy_gems: "Comprar Gemes"
campaign_desert: "Campanya del desert"
campaign_forest: "Campanya del Bosc"
campaign_dungeon: "Campanya de la Masmorra"
subscription_required: "Subscripció necessària"
free: "Gratuit"
subscribed: "Subscrit"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "čeština", englishDescription: "Czech", tr
change_hero: "Změnit hrdinu" # Go back from choose inventory to choose hero
choose_inventory: "Vyzbrojit se předměty"
buy_gems: "Zakoupit drahokamy"
campaign_desert: "Pouštní kampaň"
campaign_forest: "Lesní kampaň"
campaign_dungeon: "Jeskynní kampaň"
subscription_required: "Předplatné vyžadováno"
free: "Zdarma"
subscribed: "Předplaceno"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "dansk", englishDescription: "Danish", trans
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Deutsch (Österreich)", englishDescription:
change_hero: "Held wechseln" # Go back from choose inventory to choose hero
choose_inventory: "Gegenstände ausrüsten"
buy_gems: "Juwelen kaufen"
campaign_desert: "Wüsten Kampagne"
campaign_forest: "Wald Kampagne"
campaign_dungeon: "Dungeon Kampagne"
# subscription_required: "Subscription Required"
free: "Gratis"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Deutsch (Schweiz)", englishDescription: "Ge
change_hero: "Held wächsle" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Deutsch (Deutschland)", englishDescription:
change_hero: "Held wechseln" # Go back from choose inventory to choose hero
choose_inventory: "Gegenstände ausrüsten"
buy_gems: "Edelsteine kaufen"
campaign_desert: "Wüstenkampagne"
campaign_forest: "Waldkampagne"
campaign_dungeon: "Kerkerkampagne"
subscription_required: "Abonnement benötigt"
free: "Kostenlos"
subscribed: "Abonniert"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Ελληνικά", englishDescription: "Gre
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
choose_inventory: "Εξοπλίσου με Αντικείμενα"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "English (AU)", englishDescription: "English
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "English (UK)", englishDescription: "English
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "English (US)", englishDescription: "English
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@
change_hero: "Change Hero" # Go back from choose inventory to choose hero
choose_inventory: "Equip Items"
buy_gems: "Buy Gems"
campaign_desert: "Desert Campaign"
campaign_forest: "Forest Campaign"
campaign_dungeon: "Dungeon Campaign"
subscription_required: "Subscription Required"
free: "Free"
subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
change_hero: "Cambiar héroe" # Go back from choose inventory to choose hero
choose_inventory: "Equipar objetos"
buy_gems: "Comprar gemas"
campaign_desert: "Campaña del Desierto"
campaign_forest: "Campaña del Bosque"
campaign_dungeon: "Campaña Calabozo"
subscription_required: "Requiere Suscripción"
free: "Gratis"
subscribed: "Suscripto"
@ -317,14 +314,14 @@ module.exports = nativeDescription: "Español (América Latina)", englishDescrip
tip_brute_force: "Cuando tengas duda, usa la fuerza bruta. - Ken Thompson"
tip_extrapolation: "Solo hay dos tipos de personas: Esas que pueden extrapolar desde información incompleta..."
tip_superpower: "Programar es lo más cercano que tenemos a superpoderes."
# tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds"
# tip_no_code: "No code is faster than no code."
# tip_code_never_lies: "Code never lies, comments sometimes do. — Ron Jeffries"
# tip_reusable_software: "Before software can be reusable it first has to be usable."
# tip_optimization_operator: "Every language has an optimization operator. In most languages that operator is //"
# tip_lines_of_code: "Measuring programming progress by lines of code is like measuring aircraft building progress by weight. — Bill Gates"
# tip_source_code: "I want to change the world but they would not give me the source code."
# tip_javascript_java: "Java is to JavaScript what Car is to Carpet. - Chris Heilmann"
tip_control_destiny: "En el código abierto real, tú tienes el derecho de controlar tu propio destino. - Linus Torvalds"
tip_no_code: "Ningún código es más rápido que nada de código."
tip_code_never_lies: "El código nunca miente, los comentarios a veces sí. — Ron Jeffries"
tip_reusable_software: "Antes de que el software sea reusable, primero tiene que ser usable."
tip_optimization_operator: "Cada lenguaje tiene un operador de optimización. En la mayoría de ellos, ese operador es //"
tip_lines_of_code: "Medir el progreso en la programación en líneas de código es como medir el progreso de construcción de una aeronave por su peso. — Bill Gates"
tip_source_code: "Quisiera cambiar el mundo, pero no me dan el código fuente."
tip_javascript_java: "Java es a Javascript lo mismo que Comer es a Comercial. - Chris Heilmann"
game_menu:
inventory_tab: "Inventario"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "español (ES)", englishDescription: "Spanis
change_hero: "Seleccionar Heroe" # Go back from choose inventory to choose hero
choose_inventory: "Equipar Objetos"
buy_gems: "Comprar Joyas"
campaign_desert: "Campaña del Desierto"
campaign_forest: "Campaña del Bosque"
campaign_dungeon: "Campaña del Calabozo"
subscription_required: "Suscripción requerida"
free: "Gratis"
subscribed: "Suscrito"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "فارسی", englishDescription: "Persian",
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "suomi", englishDescription: "Finnish", tran
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "français", englishDescription: "French", t
change_hero: "Changer le Héro" # Go back from choose inventory to choose hero
choose_inventory: "Équiper des objets"
buy_gems: "Acheter des gemmes"
campaign_desert: "Campagne Desert"
campaign_forest: "Campagne de la forêt"
campaign_dungeon: "Compagne du donjon"
subscription_required: "Enregistrement nécessaire"
free: "Gratuit"
subscribed: "Enregistré"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Galego", englishDescription: "Galician", tr
change_hero: "Seleccionar Heroe" # Go back from choose inventory to choose hero
choose_inventory: "Equipar Obxectos"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "עברית", englishDescription: "Hebrew",
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "मानक हिन्दी", englishDe
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "magyar", englishDescription: "Hungarian", t
change_hero: "Hős váltás" # Go back from choose inventory to choose hero
choose_inventory: "Felszerelés"
buy_gems: "Vásárolj Drágköveket"
campaign_desert: "Sivatagi Kampány"
campaign_forest: "Erdei Kampány"
campaign_dungeon: "Várbörtön Kampány"
subscription_required: "Feliratkozást igényel"
free: "Ingyenes"
subscribed: "Feliratkozva"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Bahasa Indonesia", englishDescription: "Ind
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Italiano", englishDescription: "Italian", t
change_hero: "Cambia eroe" # Go back from choose inventory to choose hero
choose_inventory: "Dotazioni"
buy_gems: "Compra gemme"
campaign_desert: "Campagna nel Deserto"
campaign_forest: "Campagna nella Foresta"
campaign_dungeon: "Campagna nelle Segrete"
subscription_required: "E' richiesta l'iscrizione"
free: "Gratuito"
subscribed: "Per iscritti"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "日本語", englishDescription: "Japanese",
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "lietuvių kalba", englishDescription: "Lith
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Македонски", englishDescription:
change_hero: "Смени херој" # Go back from choose inventory to choose hero
choose_inventory: "Опреми се"
buy_gems: "Купи скапоцени камења"
campaign_desert: "Пустинска кампања"
campaign_forest: "Шумска кампања"
campaign_dungeon: "Занданска кампања"
subscription_required: "Потребно е зачленување"
free: "Бесплатно"
subscribed: "Зачленет"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Bahasa Melayu", englishDescription: "Bahasa
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Norsk Bokmål", englishDescription: "Norweg
change_hero: "Bytt Helt" # Go back from choose inventory to choose hero
choose_inventory: "Ta i bruk gjenstander"
buy_gems: "Kjøp Juveler"
# campaign_desert: "Desert Campaign"
campaign_forest: "Skogsfelttog"
campaign_dungeon: "Katakombefelttog"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Nederlands (België)", englishDescription:
change_hero: "Held wisselen" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
buy_gems: "Koop juwelen"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
free: "Vrij"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Nederlands (Nederland)", englishDescription
change_hero: "Verander held" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
buy_gems: "Edelstenen kopen"
campaign_desert: "Woestijncampagne"
campaign_forest: "Boscampagne"
campaign_dungeon: "Kerkercampagne"
subscription_required: "Abonnement nodig"
free: "Gratis"
subscribed: "Geabbonneerd"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Norwegian Nynorsk", englishDescription: "No
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Norsk", englishDescription: "Norwegian", tr
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "język polski", englishDescription: "Polish
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Português do Brasil", englishDescription:
change_hero: "Alterar Herói" # Go back from choose inventory to choose hero
choose_inventory: "Equipar Items"
buy_gems: "Comprar Gems"
campaign_desert: "Campanha do Deserto"
campaign_forest: "Campanha da Floresta"
campaign_dungeon: "Campanha do Calabouço"
subscription_required: "Requer assinatura"
free: "Gratuito"
subscribed: "Assinante"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Português (Portugal)", englishDescription:
change_hero: "Alterar Herói" # Go back from choose inventory to choose hero
choose_inventory: "Equipar Itens"
buy_gems: "Comprar Gemas"
campaign_desert: "Campanha do Deserto"
campaign_forest: "Campanha da Floresta"
campaign_dungeon: "Campanha da Masmorra"
subscription_required: "Subscrição Necessária"
free: "Gratuita"
subscribed: "Subscrito(a)"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "limba română", englishDescription: "Roman
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "русский", englishDescription: "Russi
change_hero: "Выбрать героя" # Go back from choose inventory to choose hero
choose_inventory: "Выбрать предметы"
buy_gems: "Купить самоцветы"
campaign_desert: "Пустынная кампания"
campaign_forest: "Лесная кампания"
campaign_dungeon: "Кампания в подземелье"
subscription_required: "Требуется подписка"
free: "Бесплатно"
subscribed: "Подписан"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "slovenčina", englishDescription: "Slovak",
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "slovenščina", englishDescription: "Sloven
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "српски", englishDescription: "Serbian
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Svenska", englishDescription: "Swedish", tr
change_hero: "Byt Hjälte" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
buy_gems: "Köp ädelstenar"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "ไทย", englishDescription: "Thai", tra
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Türkçe", englishDescription: "Turkish", t
change_hero: "Kahramanı Değiştir" # Go back from choose inventory to choose hero
choose_inventory: "Ögeleri Giy"
buy_gems: "Taş satın a"
# campaign_desert: "Desert Campaign"
campaign_forest: "Orman Senaryosu"
campaign_dungeon: "Zindan Senaryosu"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Українська", englishDescription:
change_hero: "Змінити героя" # Go back from choose inventory to choose hero
choose_inventory: "Одягнути предмети"
buy_gems: "Придбати самоцвіти"
campaign_desert: "Пустельна кампанія"
campaign_forest: "Лісова кампанія"
campaign_dungeon: "Кампанія підземелля"
subscription_required: "Потрібен абонемет"
free: "Безкоштовно"
subscribed: "абонемент є"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "اُردُو", englishDescription: "Urdu",
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "Tiếng Việt", englishDescription: "Vietn
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
buy_gems: "Mua ngọc"
# campaign_desert: "Desert Campaign"
campaign_forest: "Chơi Rừng"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
change_hero: "重新选择英雄" # Go back from choose inventory to choose hero
choose_inventory: "装备道具"
buy_gems: "购买宝石"
campaign_desert: "沙漠战役"
campaign_forest: "森林战役"
campaign_dungeon: "地牢战役"
subscription_required: "需订阅"
free: "免费"
subscribed: "已订阅"
@ -317,14 +314,14 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
tip_brute_force: "拿不准时就用穷举法。 - Ken Thompson"
tip_extrapolation: "世界上只有两类人:一类人能够根据不完整的数据进行推断……"
tip_superpower: "编程是我们拥有的最接近超能力的技能"
# tip_control_destiny: "In real open source, you have the right to control your own destiny. - Linus Torvalds"
# tip_no_code: "No code is faster than no code."
# tip_code_never_lies: "Code never lies, comments sometimes do. — Ron Jeffries"
# tip_reusable_software: "Before software can be reusable it first has to be usable."
# tip_optimization_operator: "Every language has an optimization operator. In most languages that operator is //"
# tip_lines_of_code: "Measuring programming progress by lines of code is like measuring aircraft building progress by weight. — Bill Gates"
# tip_source_code: "I want to change the world but they would not give me the source code."
# tip_javascript_java: "Java is to JavaScript what Car is to Carpet. - Chris Heilmann"
tip_control_destiny: "拥有控制自己命运的权利才是真正的开源。 - Linus Torvalds"
tip_no_code: "没有什么比不写代码来的更快。"
tip_code_never_lies: "代码从来不会说谎,但是注释有时候会. — Ron Jeffries"
tip_reusable_software: "软件能够重用的前提是,这货必须能用。"
tip_optimization_operator: "每个编程语言都有注释符号,大多数语言采用的是//"
tip_lines_of_code: "以代码行数为标准管理程序开发的进度跟用重量为标准管理飞船建造的进度一样愚蠢. — Bill Gates"
tip_source_code: "我想改变世界,但是他们不给我源代码。"
tip_javascript_java: "Java和JavaScript的关系就好比是马和马云. - Chris Heilmann"
game_menu:
inventory_tab: "道具箱"
@ -371,13 +368,13 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
subscribe:
subscribe_title: "订阅"
unsubscribe: "取消订阅"
# confirm_unsubscribe: "Confirm Unsubscribe"
# never_mind: "Never Mind, I Still Love You"
# thank_you_months_prefix: "Thank you for supporting us these last"
# thank_you_months_suffix: "months."
# thank_you: "Thank you for supporting CodeCombat."
# sorry_to_see_you_go: "Sorry to see you go! Please let us know what we could have done better."
# unsubscribe_feedback_placeholder: "O, what have we done?"
confirm_unsubscribe: "确认取消订阅"
never_mind: "没关系,我们依然喜欢你"
thank_you_months_prefix: "感谢您这"
thank_you_months_suffix: "个月以来对我们的支持."
thank_you: "感谢您支持CodeCombat."
sorry_to_see_you_go: "真舍不得亲离开啊! 请一定要让我们知道哪里做的还不够好。"
unsubscribe_feedback_placeholder: "O, 我们做了神马?"
levels: "多解锁17个关卡每周解锁5个新关卡"
heroes: "更多强大的英雄!"
gems: "每月多3500宝石奖励"
@ -408,7 +405,7 @@ module.exports = nativeDescription: "简体中文", englishDescription: "Chinese
weapons_warrior: "刀剑 - 近程物理攻击"
weapons_ranger: "弓弩,火枪 - 远程物理攻击"
weapons_wizard: "魔棒,法杖 - 远程魔法攻击"
attack: "伤害" # Can also translate as "Attack"
attack: "攻击" # Can also translate as "Attack"
health: "健康值"
speed: "速度"
regeneration: "恢复"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "繁体中文", englishDescription: "Chinese
change_hero: "更換英雄" # Go back from choose inventory to choose hero
choose_inventory: "裝備物品"
buy_gems: "購買鑽石"
campaign_desert: "沙漠戰役"
campaign_forest: "森林戰役"
campaign_dungeon: "地牢戰役"
subscription_required: "需要訂購"
free: "免費"
subscribed: "已訂購"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "吴语", englishDescription: "Wuu (Simplifi
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -68,9 +68,6 @@ module.exports = nativeDescription: "吳語", englishDescription: "Wuu (Traditio
# change_hero: "Change Hero" # Go back from choose inventory to choose hero
# choose_inventory: "Equip Items"
# buy_gems: "Buy Gems"
# campaign_desert: "Desert Campaign"
# campaign_forest: "Forest Campaign"
# campaign_dungeon: "Dungeon Campaign"
# subscription_required: "Subscription Required"
# free: "Free"
# subscribed: "Subscribed"

View file

@ -7,4 +7,4 @@ module.exports = class Campaign extends CocoModel
urlRoot: '/db/campaign'
saveBackups: true
@denormalizedLevelProperties: _.keys(_.omit(schema.properties.levels.additionalProperties.properties, ['unlocks', 'position', 'rewards']))
@denormalizedCampaignProperties: ['name', 'i18n', 'description', 'slug']
@denormalizedCampaignProperties: ['name', 'i18n', 'slug']

View file

@ -4,7 +4,8 @@ CampaignSchema = c.object()
c.extendNamedProperties CampaignSchema # name first
_.extend CampaignSchema.properties, {
i18n: {type: 'object', title: 'i18n', format: 'i18n', props: ['name', 'body']}
i18n: {type: 'object', title: 'i18n', format: 'i18n', props: ['name', 'fullName']}
fullName: { type: 'string', title: 'Full Name', description: 'Ex.: "Kithgard Dungeon"' }
ambientSound: c.object {},
mp3: { type: 'string', format: 'sound-file' }

View file

@ -404,13 +404,26 @@ $gameControlMargin: 30px
#campaign-status
position: absolute
left: 0
top: 15px
top: 5px
width: 100%
margin: 0
text-align: center
color: rgb(254,188,68)
font-size: 30px
text-shadow: black 2px 2px 0, black -2px -2px 0, black 2px -2px 0, black -2px 2px 0, black 2px 0px 0, black 0px -2px 0, black -2px 0px 0, black 0px 2px 0
z-index: 30
pointer-events: none
.campaign-status-background
background-color: rgba(255, 255, 255, 0.5)
border-radius: 10px
padding: 10px
display: inline-block
img.banner
height: 50px
vertical-align: bottom
margin: -20px 0 -6px 5px
body:not(.ipad) #campaign-view

View file

@ -80,15 +80,15 @@ button.btn.btn-lg.btn-inverse#volume-button(data-i18n="[title]play.adjust_volume
.glyphicon.glyphicon-volume-down
.glyphicon.glyphicon-volume-up
//h1#campaign-status
// if mapType == 'dungeon'
// span.spr(data-i18n="play.campaign_dungeon")
// else if mapType == 'forest'
// span.spr(data-i18n="play.campaign_forest")
// | -
// if requiresSubscription
// span.spl(data-i18n="play.subscription_required")
// else if mapType == 'dungeon'
// span.spl(data-i18n="play.free")
// else
// span.spl(data-i18n="play.subscribed")
if campaign.loaded
h1#campaign-status
.campaign-status-background
- var fullName = i18n(campaign.attributes, 'fullName')
if me.get('preferredLanguage', true).split('-')[0] == 'en' || fullName != campaign.get('fullName')
// We have a translation.
span.spr= fullName
| -
span.spl.spr= levelsCompleted
| /
span.spl= levelsTotal
img.banner(src="/images/pages/play/level-banner-complete.png")

View file

@ -334,6 +334,7 @@ class CampaignNode extends TreemaObjectNode
populateData: ->
return if @data.name?
# TODO: Need to be able to update i18n links to other campaigns
data = _.pick CampaignsNode.campaigns[@keyForParent].attributes, Campaign.denormalizedCampaignProperties
_.extend @data, data

View file

@ -2,7 +2,7 @@ I18NEditModelView = require './I18NEditModelView'
Achievement = require 'models/Achievement'
module.exports = class I18NEditAchievementView extends I18NEditModelView
id: "i18n-edit-component-view"
id: "i18n-edit-achievement-view"
modelClass: Achievement
buildTranslationList: ->

View file

@ -0,0 +1,18 @@
I18NEditModelView = require './I18NEditModelView'
Campaign = require 'models/Campaign'
module.exports = class I18NEditCampaignView extends I18NEditModelView
id: "i18n-edit-campaign-view"
modelClass: Campaign
buildTranslationList: ->
lang = @selectedLanguage
# name, description
if i18n = @model.get('i18n')
if name = @model.get('name')
@wrapRow 'Campaign short name', ['name'], name, i18n[lang]?.name, []
if description = @model.get('fullName')
@wrapRow 'Campaign full name', ['fullName'], description, i18n[lang]?.description, []
# TODO: saves to this don't work since Campaigns don't use versioning. What to do?

View file

@ -2,7 +2,7 @@ I18NEditModelView = require './I18NEditModelView'
LevelComponent = require 'models/LevelComponent'
module.exports = class I18NEditComponentView extends I18NEditModelView
id: "i18n-edit-component-view"
id: 'i18n-edit-component-view'
modelClass: LevelComponent
buildTranslationList: ->
@ -14,7 +14,7 @@ module.exports = class I18NEditComponentView extends I18NEditModelView
#- Component property descriptions
if i18n = propDoc.i18n
path = ["propertyDocumentation", propDocIndex]
path = ['propertyDocumentation', propDocIndex]
if _.isObject propDoc.description
for progLang, description of propDoc.description
@wrapRow "#{propDoc.name} description (#{progLang})", ['description', progLang], description, i18n[lang]?[progLang]?.description, path, 'markdown'
@ -22,11 +22,11 @@ module.exports = class I18NEditComponentView extends I18NEditModelView
@wrapRow "#{propDoc.name} description", ['description'], propDoc.description, i18n[lang]?.description, path, 'markdown'
if context = propDoc.context
for key, value of context
@wrapRow "#{propDoc.name} context value", ["context", key], value, i18n[lang]?.context[key], path
@wrapRow "#{propDoc.name} context value", ['context', key], value, i18n[lang]?.context[key], path
#- Component return value descriptions
if i18n = propDoc.returns?.i18n
path = ["propertyDocumentation", propDocIndex, "returns"]
path = ['propertyDocumentation', propDocIndex, 'returns']
d = propDoc.returns.description
if _.isObject d
for progLang, description of d.description
@ -38,7 +38,7 @@ module.exports = class I18NEditComponentView extends I18NEditModelView
if propDoc.args
for argDoc, argIndex in propDoc.args
if i18n = argDoc.i18n
path = ["propertyDocumentation", propDocIndex, 'args', argIndex]
path = ['propertyDocumentation', propDocIndex, 'args', argIndex]
if _.isObject argDoc.description
for progLang, description of argDoc.description
@wrapRow "#{propDoc.name} arg description #{argDoc.name} (#{progLang})", ['description', progLang], description, i18n[lang]?[progLang]?.description, path, 'markdown'

View file

@ -3,7 +3,7 @@ Level = require 'models/Level'
LevelComponent = require 'models/LevelComponent'
module.exports = class I18NEditLevelView extends I18NEditModelView
id: "i18n-edit-level-view"
id: 'i18n-edit-level-view'
modelClass: Level
buildTranslationList: ->
@ -12,21 +12,21 @@ module.exports = class I18NEditLevelView extends I18NEditModelView
# name, description
if i18n = @model.get('i18n')
if name = @model.get('name')
@wrapRow "Level name", ['name'], name, i18n[lang]?.name, []
@wrapRow 'Level name', ['name'], name, i18n[lang]?.name, []
if description = @model.get('description')
@wrapRow "Level description", ['description'], description, i18n[lang]?.description, []
@wrapRow 'Level description', ['description'], description, i18n[lang]?.description, []
if loadingTip = @model.get('loadingTip')
@wrapRow "Loading tip", ['loadingTip'], loadingTip, i18n[lang]?.loadingTip, []
@wrapRow 'Loading tip', ['loadingTip'], loadingTip, i18n[lang]?.loadingTip, []
# goals
for goal, index in @model.get('goals') ? []
if i18n = goal.i18n
@wrapRow "Goal name", ['name'], goal.name, i18n[lang]?.name, ['goals', index]
@wrapRow 'Goal name', ['name'], goal.name, i18n[lang]?.name, ['goals', index]
# documentation
for doc, index in @model.get('documentation')?.specificArticles ? []
if i18n = doc.i18n
@wrapRow "Guide article name", ['name'], doc.name, i18n[lang]?.name, ['documentation', 'specificArticles', index]
@wrapRow 'Guide article name', ['name'], doc.name, i18n[lang]?.name, ['documentation', 'specificArticles', index]
@wrapRow "'#{doc.name}' description", ['description'], doc.description, i18n[lang]?.description, ['documentation', 'specificArticles', index], 'markdown'
# sprite dialogues
@ -37,17 +37,17 @@ module.exports = class I18NEditLevelView extends I18NEditModelView
if i18n = spriteCommand.say?.i18n
if spriteCommand.say.text
@wrapRow "Sprite text", ['text'], spriteCommand.say.text, i18n[lang]?.text, pathPrefix, 'markdown'
@wrapRow 'Sprite text', ['text'], spriteCommand.say.text, i18n[lang]?.text, pathPrefix, 'markdown'
if spriteCommand.say.blurb
@wrapRow "Sprite blurb", ['blurb'], spriteCommand.say.blurb, i18n[lang]?.blurb, pathPrefix
@wrapRow 'Sprite blurb', ['blurb'], spriteCommand.say.blurb, i18n[lang]?.blurb, pathPrefix
for response, responseIndex in spriteCommand.say?.responses ? []
if i18n = response.i18n
@wrapRow "Response button", ['text'], response.text, i18n[lang]?.text, pathPrefix.concat(['responses', responseIndex])
@wrapRow 'Response button', ['text'], response.text, i18n[lang]?.text, pathPrefix.concat(['responses', responseIndex])
# victory modal
if i18n = @model.get('victory')?.i18n
@wrapRow "Victory text", ['body'], @model.get('victory').body, i18n[lang]?.body, ['victory'], 'markdown'
@wrapRow 'Victory text', ['body'], @model.get('victory').body, i18n[lang]?.body, ['victory'], 'markdown'
# code comments
for thang, thangIndex in @model.get('thangs') ? []
@ -57,4 +57,4 @@ module.exports = class I18NEditLevelView extends I18NEditModelView
if (i18n = method.i18n) and (context = method.context)
for key, value of context
path = ['thangs', thangIndex, 'components', componentIndex, 'config', 'programmableMethods', methodName]
@wrapRow "Code comment", ["context", key], value, i18n[lang]?.context[key], path
@wrapRow 'Code comment', ['context', key], value, i18n[lang]?.context[key], path

View file

@ -2,7 +2,7 @@ I18NEditModelView = require './I18NEditModelView'
ThangType = require 'models/ThangType'
module.exports = class ThangTypeI18NView extends I18NEditModelView
id: "thang-type-i18n-view"
id: 'thang-type-i18n-view'
modelClass: ThangType
buildTranslationList: ->

View file

@ -6,12 +6,13 @@ LevelComponent = require 'models/LevelComponent'
ThangType = require 'models/ThangType'
Level = require 'models/Level'
Achievement = require 'models/Achievement'
Campaign = require 'models/Campaign'
languages = _.keys(require 'locale/locale').sort()
PAGE_SIZE = 100
module.exports = class I18NHomeView extends RootView
id: "i18n-home-view"
id: 'i18n-home-view'
template: template
events:
@ -34,8 +35,9 @@ module.exports = class I18NHomeView extends RootView
@components = new CocoCollection([], { url: '/db/level.component?view=i18n-coverage', project: project, model: LevelComponent })
@levels = new CocoCollection([], { url: '/db/level?view=i18n-coverage', project: project, model: Level })
@achievements = new CocoCollection([], { url: '/db/achievement?view=i18n-coverage', project: project, model: Achievement })
@campaigns = new CocoCollection([], { url: '/db/campaign?view=i18n-coverage', project: project, model: Campaign })
for c in [@thangTypes, @components, @levels, @achievements]
for c in [@thangTypes, @components, @levels, @achievements, @campaigns]
c.skip = 0
c.fetch({data: {skip: 0, limit: PAGE_SIZE}, cache:false})
@supermodel.loadCollection(c, 'documents')
@ -45,10 +47,11 @@ module.exports = class I18NHomeView extends RootView
onCollectionSynced: (collection) ->
for model in collection.models
model.i18nURLBase = switch model.constructor.className
when "ThangType" then "/i18n/thang/"
when "LevelComponent" then "/i18n/component/"
when "Achievement" then "/i18n/achievement/"
when "Level" then "/i18n/level/"
when 'ThangType' then '/i18n/thang/'
when 'LevelComponent' then '/i18n/component/'
when 'Achievement' then '/i18n/achievement/'
when 'Level' then '/i18n/level/'
when 'Campaign' then '/i18n/campaign/'
getMore = collection.models.length is PAGE_SIZE
@aggregateModels.add(collection.models)
@render()

View file

@ -133,6 +133,7 @@ module.exports = class CampaignView extends RootView
context = super(context)
context.campaign = @campaign
context.levels = _.values($.extend true, {}, @campaign.get('levels'))
context.levelsCompleted = context.levelsTotal = 0
for level in context.levels
level.position ?= { x: 10, y: 10 }
level.locked = not me.ownsLevel level.original
@ -146,6 +147,9 @@ module.exports = class CampaignView extends RootView
if level.unlocksHero
level.unlockedHero = level.unlocksHero.originalID in (me.get('earned')?.heroes or [])
level.hidden = level.locked
unless level.disabled
++context.levelsTotal
++context.levelsCompleted if @levelStatusMap[level.slug] is 'complete'
@determineNextLevel context.levels if @sessions.loaded
# put lower levels in last, so in the world map they layer over one another properly.
@ -161,7 +165,6 @@ module.exports = class CampaignView extends RootView
context.adjacentCampaigns = _.filter _.values(_.cloneDeep(@campaign.get('adjacentCampaigns') or {})), (ac) =>
return false if ac.showIfUnlocked and (ac.showIfUnlocked not in me.levels()) and not @editorMode
ac.name = utils.i18n ac, 'name'
ac.description = utils.i18n ac, 'description'
styles = []
styles.push "color: #{ac.color}" if ac.color
styles.push "transform: rotate(#{ac.rotation}deg)" if ac.rotation

View file

@ -5,8 +5,11 @@
// Usage restricted to HoC Dates:
// mongo <address>:<port>/<database> -eval "var startDate='2014-12-08T00:00:00.000Z', endDate='2014-12-14T00:00:00.000Z';" <script file> -u <username> -p <password>
// TODO: query against _id instead of created
// TODO: Must be a better way to query for this data all at once.
var startTime = new Date();
var lastLevelCompleted = {};
var paymentsCursor;
@ -20,49 +23,52 @@ if (typeof startDate !== "undefined" && startDate !== null && typeof endDate !==
]
});
} else {
print("No date range specified.");
paymentsCursor = db.payments.find({"stripe.subscriptionID" : { "$exists" : true }});
print("No date range specified");
paymentsCursor = db.payments.find({"stripe.subscriptionID": { "$exists" : true }});
}
while (paymentsCursor.hasNext()) {
var doc = paymentsCursor.next();
var ID = doc._id;
var purchaseDate = doc.created;
var doc = paymentsCursor.next();
var purchaseDate = doc.created;
var user = doc.purchaser.valueOf();
// Find last level session completed
var levelSessionCursor = db['level.sessions'].find({
$and: [{"state.complete" : true}, {creator : doc.purchaser.valueOf()}, {changed: {$lt: ISODate(purchaseDate)}}]
}).sort({created: -1});
if (levelSessionCursor.hasNext()) {
var lastLevelSessionCompleted = levelSessionCursor.next();
// print("Processing purchase on " + purchaseDate + " for " + user);
// Find last level completed
var levelCursor = db.levels.find({"original" : ObjectId(lastLevelSessionCompleted.level.original), "version.isLatestMajor": true, "version.isLatestMinor": true})
if (levelCursor.hasNext()) {
var lastLevel = levelCursor.next();
if (!lastLevelCompleted[lastLevel.name])
lastLevelCompleted[lastLevel.name] = 0;
lastLevelCompleted[lastLevel.name]++;
}
else {
if (!lastLevelCompleted['unknown'])
lastLevelCompleted['unknown'] = 0;
lastLevelCompleted['unknown']++;
}
// Find last level session completed
var levelSessionCursor = db['level.sessions'].find({
$and: [{"state.complete" : true}, {creator : user}, {changed: {$lt: ISODate(purchaseDate)}}]
}).sort({created: -1});
if (levelSessionCursor.hasNext()) {
var lastLevelSessionCompleted = levelSessionCursor.next();
// Find last level completed
var levelCursor = db.levels.find({"original" : ObjectId(lastLevelSessionCompleted.level.original), "version.isLatestMajor": true, "version.isLatestMinor": true})
if (levelCursor.hasNext()) {
var lastLevel = levelCursor.next();
if (!lastLevelCompleted[lastLevel.name]) lastLevelCompleted[lastLevel.name] = 0;
lastLevelCompleted[lastLevel.name]++;
}
else {
if (!lastLevelCompleted['unknown'])
lastLevelCompleted['unknown'] = 0;
lastLevelCompleted['unknown']++;
if (!lastLevelCompleted['unknown']) lastLevelCompleted['unknown'] = 0;
lastLevelCompleted['unknown']++;
}
}
else {
if (!lastLevelCompleted['unknown']) lastLevelCompleted['unknown'] = 0;
lastLevelCompleted['unknown']++;
}
}
// Sort descending count and print
var sorted = [];
var total = 0;
for (key in lastLevelCompleted) {
sorted.push({name: key, count: lastLevelCompleted[key]});
sorted.push({name: key, count: lastLevelCompleted[key]});
total += lastLevelCompleted[key];
}
sorted.sort(function(a,b) { return b.count - a.count});
for (var i = 0; i < sorted.length; i++) {
print(sorted[i].count + "\t" + sorted[i].name);
print(sorted[i].count + "\t" + (sorted[i].count / total * 100).toFixed(2) + "%\t" + sorted[i].name);
}
print("Runtime: " + (new Date() - startTime) + "ms");

View file

@ -9,6 +9,7 @@ CampaignHandler = class CampaignHandler extends Handler
modelClass: Campaign
editableProperties: [
'name'
'fullName'
'i18n'
'i18nCoverage'
'ambientSound'