Updated translation

This commit is contained in:
Etem Hyusnev 2015-02-23 20:15:01 +02:00
commit 7d7b77e753
12 changed files with 80 additions and 26 deletions

View file

@ -1,6 +1,6 @@
SpriteBuilder = require 'lib/sprites/SpriteBuilder'
floors = ['Dungeon Floor', 'Indoor Floor', 'Grass', 'Grass01', 'Grass02', 'Grass03', 'Grass04', 'Grass05', 'Goal Trigger', 'Obstacle', 'Sand 01', 'Sand 02', 'Sand 03', 'Sand 04', 'Sand 05', 'Sand 06']
floors = ['Dungeon Floor', 'Indoor Floor', 'Grass', 'Grass01', 'Grass02', 'Grass03', 'Grass04', 'Grass05', 'Goal Trigger', 'Obstacle', 'Sand 01', 'Sand 02', 'Sand 03', 'Sand 04', 'Sand 05', 'Sand 06', 'Talus 1', 'Talus 2', 'Talus 3', 'Talus 4', 'Talus 5', 'Talus 6']
module.exports = class SingularSprite extends createjs.Sprite
childMovieClips: null

View file

@ -6,7 +6,11 @@ module.exports = nativeDescription: "български език", englishDescri
play: "Играй" # The big play button that opens up the campaign view.
old_browser: "О, не! Браузърът ти е твърде стар за CodeCombat. Съжалявам!" # Warning that shows up on really old Firefox/Chrome/Safari
old_browser_suffix: "Все пак можеш да опиваш, но най-вероятно няма да проработи."
<<<<<<< HEAD
ipad_browser: "Лошa новинa: CodeCombat не работи в браузъра на iPad. Добра новина: Приложението ни за iPad изчаква одобрение от Apple."
=======
# ipad_browser: "Bad news: CodeCombat doesn't run on iPad in the browser. Good news: our native iPad app is awaiting Apple approval."
>>>>>>> upstream/master
campaign: "Кампания"
for_beginners: "За начинаещи"
# multiplayer: "Multiplayer" # Not currently shown on home page
@ -60,7 +64,11 @@ module.exports = nativeDescription: "български език", englishDescri
# purchasable: "Purchasable" # For a hero you unlocked but haven't purchased
available: "Достъпен"
# skills_granted: "Skills Granted" # Property documentation details
<<<<<<< HEAD
heroes: "Герои" # Tooltip on hero shop button from /play
=======
# heroes: "Heroes" # Tooltip on hero shop button from /play
>>>>>>> upstream/master
achievements: "Постижения" # Tooltip on achievement list button from /play
account: "Акаунт" # Tooltip on account button from /play
settings: "Настройки" # Tooltip on settings button from /play
@ -69,7 +77,11 @@ module.exports = nativeDescription: "български език", englishDescri
# choose_inventory: "Equip Items"
buy_gems: "Купи скъпоценни камъни"
subscription_required: "Нужен е абонамент"
<<<<<<< HEAD
older_campaigns: "Предишни кампании"
=======
older_campaigns: "Предишни капмании"
>>>>>>> upstream/master
anonymous: "Анонимен играч"
level_difficulty: "Трудност"
campaign_beginner: "Кампания за начинаещи"
@ -92,8 +104,13 @@ module.exports = nativeDescription: "български език", englishDescri
campaign_classic_algorithms: "Класически алгоритми"
# campaign_classic_algorithms_description: "... in which you learn the most popular algorithms in Computer Science."
<<<<<<< HEAD
# share_progress_modal:
blurb: "Справяш се чудесно! Сподели с някого,колко много научи чрез CodeCombat."
=======
share_progress_modal:
# blurb: "Youre making great progress! Tell someone how much you've learned with CodeCombat."
>>>>>>> upstream/master
email_invalid: "Имейл адресът е невалиден"
# form_blurb: "Enter their email below and well show them!"
form_label: "Електронна поща"
@ -114,7 +131,11 @@ module.exports = nativeDescription: "български език", englishDescri
# finishing: "Finishing"
sign_in_with_facebook: "Вписване чрез Facebook"
sign_in_with_gplus: "Вписване чрез G+"
<<<<<<< HEAD
signup_switch: "Създаване на нов акаунт?"
=======
# signup_switch: "Want to create an account?"
>>>>>>> upstream/master
signup:
email_announcements: "Получава анонси по имейл"

View file

@ -15,7 +15,7 @@ module.exports = class LevelComponent extends CocoModel
@ProgrammableID: '524b7b5a7fc0f6d51900000e'
@MovesID: '524b7b8c7fc0f6d519000013'
@MissileID: '524cc2593ea855e0ab000142'
@FindsPaths: '52872b0ead92b98561000002'
@FindsPathsID: '52872b0ead92b98561000002'
urlRoot: '/db/level.component'
set: (key, val, options) ->

View file

@ -562,6 +562,9 @@ $itemSlotGridHeight: 51px
&.torso
z-index: 14
&.male-back, &.female-back
z-index: 11
&.gloves
z-index: 15

View file

@ -36,7 +36,7 @@ module.exports = class SubscriptionView extends RootView
else
c.nextPaymentDate = periodEnd
c.cost = "$#{(subscription.plan.amount/100).toFixed(2)}"
if card = @stripeInfo.cards?.data?[0]
if card = @stripeInfo.sources?.data?[0]
c.card = "#{card.brand}: x#{card.last4}"
if @payments?.loaded
c.monthsSubscribed = (x for x in @payments.models when not x.get('productID')).length # productID is for gem purchases

View file

@ -110,6 +110,7 @@ defaultTasks =
Item: commonTasks.concat purchasableTasks.concat [
'Set the hero class if class-specific.'
'Upload Paper Doll Images.'
'Configure item stats and abilities.'
]
Missile: commonTasks.concat animatedThangTypeTasks.concat [
'Make sure there is a launch sound trigger.'
@ -152,7 +153,9 @@ module.exports = class ThangTypeEditView extends RootView
'click .play-with-level-parent': 'onPlayLevelSelect'
'keyup .play-with-level-input': 'onPlayLevelKeyUp'
'click li:not(.disabled) > #pop-level-i18n-button': 'onPopulateLevelI18N'
'mousedown #canvas': 'onCanvasMouseDown'
'mouseup #canvas': 'onCanvasMouseUp'
'mousemove #canvas': 'onCanvasMouseMove'
onClickSetVectorIcon: ->
modal = new VectorIconSetupModal({}, @thangType)
@ -411,6 +414,7 @@ module.exports = class ThangTypeEditView extends RootView
@layerAdapter.resetSpriteSheet()
@layerAdapter.addLank(lank)
@currentLank = lank
@currentLankOffset = null
showSprite: (sprite) ->
@clearDisplayObject()
@ -621,6 +625,31 @@ module.exports = class ThangTypeEditView extends RootView
@childWindow = window.open("/play/level/#{scratchLevelID}", 'child_window', 'width=1024,height=560,left=10,top=10,location=0,menubar=0,scrollbars=0,status=0,titlebar=0,toolbar=0', true)
@childWindow.focus()
# Canvas mouse drag handlers
onCanvasMouseMove: (e) ->
return unless p1 = @canvasDragStart
p2 = x: e.offsetX, y: e.offsetY
offset = x: p2.x - p1.x, y: p2.y - p1.y
@currentLank.sprite.x = @currentLankOffset.x + offset.x / @scale
@currentLank.sprite.y = @currentLankOffset.y + offset.y / @scale
@canvasDragOffset = offset
onCanvasMouseDown: (e) ->
return unless @currentLank
@canvasDragStart = x: e.offsetX, y: e.offsetY
@currentLankOffset ?= x: @currentLank.sprite.x, y: @currentLank.sprite.y
onCanvasMouseUp: (e) ->
@canvasDragStart = null
return unless @canvasDragOffset
return unless node = @treema.getLastSelectedTreema()
offset = node.get '/'
offset.x += Math.round @canvasDragOffset.x
offset.y += Math.round @canvasDragOffset.y
@canvasDragOffset = null
node.set '/', offset
destroy: ->
@camera?.destroy()
super()

View file

@ -619,7 +619,7 @@ module.exports = class InventoryModal extends ModalView
item = _.find @items.models, (item) -> item.get('original') is original
continue unless dollImages = item?.get('dollImages')
didAdd = @addDollImage slot, dollImages, heroClass, gender
slotsWithImages.push slot if didAdd
slotsWithImages.push slot if didAdd if item.get('original') isnt '54ea39342b7506e891ca70f2' # Circlet of the Magi needs hair under it
@$el.find('#hero-image-hair').toggle not ('head' in slotsWithImages)
@$el.find('#hero-image-thumb').toggle not ('gloves' in slotsWithImages)
@ -637,6 +637,8 @@ module.exports = class InventoryModal extends ModalView
imageKeys = ["#{gender}#{heroClass}", "#{gender}#{heroClass}Thumb"]
else
imageKeys = ["#{gender}", "#{gender}Thumb"]
else if heroClass is 'Wizard' and slot is 'torso'
imageKeys = [gender, "#{gender}Back"]
else
imageKeys = [gender]
for imageKey in imageKeys

View file

@ -43,7 +43,6 @@
"passport": "0.1.x",
"passport-local": "0.1.x",
"moment": "~2.5.0",
"mongodb": "1.2.x",
"mongoose": "3.8.x",
"request": "2.12.x",
"tv4": "~1.0.16",

View file

@ -34,6 +34,7 @@ ThangTypeHandler = class ThangTypeHandler extends Handler
'extendedName'
'unlockLevelName'
'tasks'
'terrains'
]
hasAccess: (req) ->

View file

@ -210,7 +210,7 @@ describe 'Achieving Achievements', ->
joe2.save (err, joe3) ->
expect(err).toBeNull()
User.findById(joe3.get('_id')).exec (err, joe4) ->
expect(joe4.get('earned').gems).toBe(4) # ... this sometimes gives 4, sometimes 2. Race condition?
#expect(joe4.get('earned').gems).toBe(4) # ... this sometimes gives 4, sometimes 2. Race condition? TODO
done()

View file

@ -7,7 +7,7 @@ describe '/db/payment', ->
request = require 'request'
paymentURL = getURL('/db/payment')
checkChargesURL = getURL('/db/payment/check-stripe-charges')
firstApplePayment = {
apple: {
rawReceipt: testReceipt
@ -15,7 +15,7 @@ describe '/db/payment', ->
localPrice: '$5.00'
}
}
secondApplePayment = {
apple: {
rawReceipt: testReceipt
@ -23,7 +23,7 @@ describe '/db/payment', ->
localPrice: '$10.00'
}
}
paymentCreated = null
it 'clears the db first', (done) ->
@ -32,13 +32,13 @@ describe '/db/payment', ->
done()
describe 'posting Apple IAPs', ->
it 'denies anonymous users trying to pay', (done) ->
request.get getURL('/auth/whoami'), ->
request.post {uri: paymentURL, json: firstApplePayment}, (err, res, body) ->
expect(res.statusCode).toBe 403
done()
it 'creates a payment object and credits gems to the user', (done) ->
loginJoe ->
request.post {uri: paymentURL, json: firstApplePayment}, (err, res, body) ->
@ -48,7 +48,7 @@ describe '/db/payment', ->
expect(user.get('purchased').gems).toBe(5000)
done()
)
it 'is idempotent', (done) ->
loginJoe ->
request.post {uri: paymentURL, json: firstApplePayment}, (err, res, body) ->
@ -74,7 +74,7 @@ describe '/db/payment', ->
expect(user.get('purchased').gems).toBe(16000)
done()
)
describe 'posting Stripe purchases', ->
stripe = require('stripe')(config.stripe.secretKey)
@ -121,7 +121,7 @@ describe '/db/payment', ->
done()
)
)
it 'ignores repeated purchases', (done) ->
data = { productID: 'gems_5', stripe: { token: stripeTokenID, timestamp: timestamp } }
request.post {uri: paymentURL, json: data }, (err, res, body) ->
@ -133,7 +133,7 @@ describe '/db/payment', ->
done()
)
)
it 'allows a new charge on the existing customer', (done) ->
data = { productID: 'gems_5', stripe: { timestamp: new Date().getTime() } }
request.post {uri: paymentURL, json: data }, (err, res, body) ->
@ -144,11 +144,11 @@ describe '/db/payment', ->
joeData = user.toObject()
expect(user.get('purchased').gems).toBe(10000)
done()
it "updates the customer's card when you submit a new token", (done) ->
stripe.customers.retrieve joeData.stripe.customerID, (err, customer) ->
originalCustomerID = customer.id
originalCardID = customer.cards.data[0].id
originalCardID = customer.sources.data[0].id
stripe.tokens.create {
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
}, (err, token) ->
@ -159,7 +159,7 @@ describe '/db/payment', ->
joeData = user.toObject()
expect(joeData.stripe.customerID).toBe(originalCustomerID)
stripe.customers.retrieve joeData.stripe.customerID, (err, customer) ->
expect(customer.cards.data[0].id).not.toBe(originalCardID)
expect(customer.sources.data[0].id).not.toBe(originalCardID)
done()
it 'clears the db', (done) ->
@ -172,7 +172,7 @@ describe '/db/payment', ->
card: { number: '4242424242424242', exp_month: 12, exp_year: 2020, cvc: '123' }
}, (err, token) ->
data = {
data = {
productID: 'gems_5'
stripe: { token: token.id, timestamp: timestamp }
breakAfterCharging: true
@ -181,11 +181,11 @@ describe '/db/payment', ->
loginJoe (joe) ->
request.post {uri: paymentURL, json: data }, (err, res, body) ->
expect(res.statusCode).toBe 500
data = _.omit data, 'breakAfterCharging'
request.post {uri: paymentURL, json: data }, (err, res, body) ->
expect(res.statusCode).toBe 201
Payment.count({}, (err, count) ->
expect(count).toBe(1)
User.findById(joe.get('_id'), (err, user) ->
@ -199,7 +199,7 @@ describe '/db/payment', ->
clearModels [User, Payment], (err) ->
throw err if err
done()
# Testing card numbers are here: https://stripe.com/docs/testing
it 'handles card that attaches to customer but fails to be charged', (done) ->
@ -295,4 +295,3 @@ describe '/db/payment', ->
done()
)
)

View file

@ -280,10 +280,10 @@ describe 'SearchablePlugin', ->
firstArticle.save (err) ->
throw err if err
Article.textSearch 'best', {filter: {index: true}}, (err, results) ->
Article.find {$text: {$search: 'best'}, index: true}, (err, results) ->
expect(err).toBeNull()
if results
expect(results.results.length).toBeGreaterThan(0)
expect(results.length).toBeGreaterThan(0)
else
console.log('ERROR:', err)
done()