mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-14 01:31:15 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
ca55708b8a
4 changed files with 109 additions and 93 deletions
|
@ -42,6 +42,7 @@ module.exports = FacebookHandler = class FacebookHandler extends CocoClass
|
|||
FB.api('/me', {fields: 'email,last_name,first_name,gender'}, @onReceiveMeInfo)
|
||||
|
||||
onReceiveMeInfo: (r) =>
|
||||
console.log "Got Facebook user info:", r
|
||||
unless r.email
|
||||
console.error('could not get data, since no email provided')
|
||||
return
|
||||
|
|
|
@ -4,20 +4,20 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
no_ie: "죄송하지만 코드컴뱃은 인터넷 익스플로러 8에서는 동작하지 않습니다." # Warning that only shows up in IE8 and older
|
||||
no_mobile: "코드 컴뱃은 모바일 기기용으로 제작되지 않았습니다. 아마 동작하지 않을 가능성이 높습니다." # Warning that shows up on mobile devices
|
||||
play: "시작" # The big play button that opens up the campaign view.
|
||||
# play_campaign_version: "Play Campaign Version" # Shows up under big play button if you only play /courses
|
||||
play_campaign_version: "캠페인 버전 플레이" # Shows up under big play button if you only play /courses
|
||||
old_browser: "브라우저가 너무 오래된 버전이라 코드 컴뱃을 실행할 수 없습니다." # Warning that shows up on really old Firefox/Chrome/Safari
|
||||
old_browser_suffix: "시도해볼 수는 있겠지만..안될 수도 있습니다."
|
||||
# ipad_browser: "Bad news: CodeCombat doesn't run on iPad in the browser. Good news: our native iPad app is awaiting Apple approval."
|
||||
ipad_browser: "슬픈 소식: 코드컴뱃은 아이패드의 브라우저에서 구동되지않습니다. 좋은 소식: 우리의 아이패드 앱은 애플의 승인을 기다리고있습니다 ."
|
||||
campaign: "캠페인"
|
||||
for_beginners: "초보자용"
|
||||
multiplayer: "멀티플레이어" # Not currently shown on home page
|
||||
for_developers: "개발자용" # Not currently shown on home page.
|
||||
# or_ipad: "Or download for iPad"
|
||||
or_ipad: "또는 아이패드의 다운로드"
|
||||
|
||||
nav:
|
||||
play: "레벨" # The top nav bar entry where players choose which levels to play
|
||||
community: "커뮤니티"
|
||||
# courses: "Courses"
|
||||
courses: "코스"
|
||||
editor: "에디터"
|
||||
blog: "블로그"
|
||||
forum: "포럼"
|
||||
|
@ -33,7 +33,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
contact: "문의"
|
||||
twitter_follow: "팔로우"
|
||||
teachers: "선생님들"
|
||||
# careers: "Careers"
|
||||
careers: "채용"
|
||||
|
||||
modal:
|
||||
close: "닫기"
|
||||
|
@ -52,7 +52,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
|
||||
play:
|
||||
play_as: "Play As " # Ladder page
|
||||
# compete: "Compete!" # Course details page
|
||||
compete: "경쟁!" # Course details page
|
||||
spectate: "관중모드" # Ladder page
|
||||
players: "플레이어" # Hover over a level on /play
|
||||
hours_played: "플레이한 시간" # Hover over a level on /play
|
||||
|
@ -68,14 +68,14 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
achievements: "성취한 목표" # Tooltip on achievement list button from /play
|
||||
account: "계정" # Tooltip on account button from /play
|
||||
settings: "설정" # Tooltip on settings button from /play
|
||||
# poll: "Poll" # Tooltip on poll button from /play
|
||||
poll: "투표" # Tooltip on poll button from /play
|
||||
next: "다음" # Go from choose hero to choose inventory before playing a level
|
||||
change_hero: "영웅 교체" # Go back from choose inventory to choose hero
|
||||
buy_gems: "젬 구매"
|
||||
# subscription_required: "Subscription Required"
|
||||
subscription_required: "가입 필수"
|
||||
anonymous: "이름없는 플레이어"
|
||||
level_difficulty: "난이도: "
|
||||
# play_classroom_version: "Play Classroom Version" # Choose a level in campaign version that you also can play in one of your courses
|
||||
play_classroom_version: "교실 버전 플레이" # Choose a level in campaign version that you also can play in one of your courses
|
||||
campaign_beginner: "초보자 캠페인"
|
||||
awaiting_levels_adventurer_prefix: "매주 마다 새로운 레벨이 생깁니다."
|
||||
awaiting_levels_adventurer: "모험자로 등록 하세요!"
|
||||
|
@ -83,16 +83,16 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
adjust_volume: "소리 조절"
|
||||
campaign_multiplayer: "멀티 플레이어 전투장"
|
||||
campaign_multiplayer_description: "... 이곳에서 당신은 다른 인간 플레이어들과 직접 결투할 수 있습니다."
|
||||
# campaign_old_multiplayer: "(Deprecated) Old Multiplayer Arenas"
|
||||
# campaign_old_multiplayer_description: "Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas."
|
||||
campaign_old_multiplayer: "(추천하지 않습니다) 숙련된 멀티플레이어 경쟁"
|
||||
campaign_old_multiplayer_description: "더 문명화 된 시대의 유물. 어떤 시뮬레이션은 이러한 이전, 영웅없는 멀티 경기장에 대해 실행되지 않습니다."
|
||||
|
||||
share_progress_modal:
|
||||
# blurb: "You’re making great progress! Tell your parent how much you've learned with CodeCombat."
|
||||
blurb: "당신은 큰 진전을 보이고있습니다! 당신이 코드컴뱃으로 얼마나 많이 배웠는지 부모님게 말하십시오."
|
||||
email_invalid: "이메일 주소가 올바르지 않습니다."
|
||||
# form_blurb: "Enter your parent's email below and we’ll show them!"
|
||||
form_blurb: "아래에 부모님의 이메일을 입력하고 우리는 그것들을 보여줍니다!"
|
||||
form_label: "이메일"
|
||||
placeholder: "이메일"
|
||||
# title: "Excellent Work, Apprentice"
|
||||
title: "우수한, 초심자"
|
||||
|
||||
login:
|
||||
sign_up: "계정 생성"
|
||||
|
@ -100,8 +100,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
logging_in: "로그인 중"
|
||||
log_out: "로그아웃"
|
||||
forgot_password: "비밀번호를 잊으셨나요?"
|
||||
# authenticate_gplus: "Authenticate G+"
|
||||
# load_profile: "Load G+ Profile"
|
||||
authenticate_gplus: "G+ 인증"
|
||||
load_profile: "G+ 프로필 불러오기"
|
||||
finishing: "완료중.."
|
||||
sign_in_with_facebook: "Facebook으로 로그인"
|
||||
sign_in_with_gplus: "G+로 로그인"
|
||||
|
@ -114,9 +114,9 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
log_in: "비밀번호로 로그인"
|
||||
required: "진행하기 전에 로그인이 필요합니다."
|
||||
login_switch: "이미 계정이 있으신가요?"
|
||||
# school_name: "School Name and City"
|
||||
# optional: "optional"
|
||||
# school_name_placeholder: "Example High School, Springfield, IL"
|
||||
school_name: "학교 이름과 도시"
|
||||
optional: "옵션"
|
||||
school_name_placeholder: "예시 고등학교, 스프링필드, IL"
|
||||
|
||||
recover:
|
||||
recover_account_title: "계정 복구"
|
||||
|
@ -166,18 +166,18 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
withdrawn: "취소됨"
|
||||
accept: "승인"
|
||||
reject: "보류"
|
||||
# withdraw: "Withdraw"
|
||||
withdraw: "철수"
|
||||
submitter: "제출자"
|
||||
submitted: "제출됨"
|
||||
commit_msg: "커밋 메세지"
|
||||
version_history: "버전 히스토리"
|
||||
version_history_for: "버전 히스토리 : "
|
||||
# select_changes: "Select two changes below to see the difference."
|
||||
# undo_prefix: "Undo"
|
||||
select_changes: "차이를 보기위해 두 가지 사항을 변경하도록 선택합니다."
|
||||
undo_prefix: "되돌리기"
|
||||
undo_shortcut: "(Ctrl+Z)"
|
||||
# redo_prefix: "Redo"
|
||||
redo_prefix: "다시하기"
|
||||
redo_shortcut: "(Ctrl+Shift+Z)"
|
||||
# play_preview: "Play preview of current level"
|
||||
play_preview: "현재 수준의 미리보기 재생"
|
||||
result: "결과"
|
||||
results: "결과들"
|
||||
description: "설명"
|
||||
|
@ -221,8 +221,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
years: "년"
|
||||
|
||||
play_level:
|
||||
# completed_level: "Completed Level:"
|
||||
# course: "Course:"
|
||||
completed_level: "완료된 레벨:"
|
||||
course: "코스:"
|
||||
done: "완료"
|
||||
next_level: "다음 레벨:"
|
||||
next_game: "다음 게임"
|
||||
|
@ -256,26 +256,26 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
victory_saving_progress: "저장하기"
|
||||
victory_go_home: "홈으로"
|
||||
victory_review: "리뷰를 남겨주세요"
|
||||
# victory_review_placeholder: "How was the level?"
|
||||
victory_review_placeholder: "어떤 레벨입니까?"
|
||||
victory_hour_of_code_done: "정말 종료합니까?"
|
||||
victory_hour_of_code_done_yes: "네 내 Hour of Code™ 완료했습니다!"
|
||||
victory_experience_gained: "획득한 경험치"
|
||||
victory_gems_gained: "획득한 젬"
|
||||
victory_new_item: "새로운 아이템"
|
||||
# victory_viking_code_school: "Holy smokes, that was a hard level you just beat! If you aren't already a software developer, you should be. You just got fast-tracked for acceptance with Viking Code School, where you can take your skills to the next level and become a professional web developer in 14 weeks."
|
||||
victory_viking_code_school: "놀랍습니다, 당신은 그냥 이길 힘든 수준이었습니다! 이미 소프트웨어 개발자가 아닌 경우, 당신은 비이킹 코드 학교에서 빠르게 이해할것입니다, 당신이 다음 레벨에서 자신의 능력을 14주 동안 전문 웹 개발자가 될 수있는 곳입니다."
|
||||
victory_become_a_viking: "바이킹이 되세요"
|
||||
guide_title: "가이드"
|
||||
tome_cast_button_run: "실행"
|
||||
tome_cast_button_running: "실행중"
|
||||
# tome_cast_button_ran: "Ran"
|
||||
# tome_submit_button: "Submit"
|
||||
# tome_reload_method: "Reload original code for this method" # Title text for individual method reload button.
|
||||
# tome_select_method: "Select a Method"
|
||||
# tome_see_all_methods: "See all methods you can edit" # Title text for method list selector (shown when there are multiple programmable methods).
|
||||
tome_cast_button_ran: "실행됨"
|
||||
tome_submit_button: "적용"
|
||||
tome_reload_method: "이 방법에 대한 원래의 코드를 다시불러오기" # Title text for individual method reload button.
|
||||
tome_select_method: "방법 선택"
|
||||
tome_see_all_methods: "편집 할 수있는 모든 방법을 참조하십시오" # Title text for method list selector (shown when there are multiple programmable methods).
|
||||
tome_select_a_thang: "누군가를 선택하세요. "
|
||||
tome_available_spells: "사용 가능한 마법"
|
||||
tome_your_skills: "당신의 스킬"
|
||||
# tome_current_method: "Current Method"
|
||||
tome_current_method: "최근 방법"
|
||||
code_saved: "코드가 저장됨"
|
||||
skip_tutorial: "넘기기 (esc)"
|
||||
keyboard_shortcuts: "단축키"
|
||||
|
@ -284,12 +284,12 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
problem_alert_title: "코드를 수정하세요"
|
||||
time_current: "현재:"
|
||||
time_total: "최대:"
|
||||
# time_goto: "Go to:"
|
||||
# non_user_code_problem_title: "Unable to Load Level"
|
||||
# infinite_loop_title: "Infinite Loop Detected"
|
||||
# infinite_loop_description: "The initial code to build the world never finished running. It's probably either really slow or has an infinite loop. Or there might be a bug. You can either try running this code again or reset the code to the default state. If that doesn't fix it, please let us know."
|
||||
# check_dev_console: "You can also open the developer console to see what might be going wrong."
|
||||
# check_dev_console_link: "(instructions)"
|
||||
time_goto: "가기:"
|
||||
non_user_code_problem_title: "레벨을 로드 할 수 없습니다"
|
||||
infinite_loop_title: "무한 루프 감지"
|
||||
infinite_loop_description: "세계를 구축하는 초기 코드는 결코 실행이 완료되지 않습니다. 아마도 하나의 정말 느리거나 또는 무한 루프가 있습니다. 혹은 버그일수있습니다. 당신은 다시 이 코드를 실행하려고하거나 기본 상태로 코드를 재설정 할 수 있습니다. 그게 해결되지 않으면, 저희에게 알려 주시기 바랍니다."
|
||||
check_dev_console: "또한 잘못 갈 수를 알기 위해 개발자 콘솔을 열 수 있습니다."
|
||||
check_dev_console_link: "(명령어)"
|
||||
infinite_loop_try_again: "다시 시도해보세요."
|
||||
infinite_loop_reset_level: "레벨 리셋"
|
||||
infinite_loop_comment_out: "내 코드를 일시적 주석처리하기"
|
||||
|
@ -297,7 +297,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
tip_scrub_shortcut: "Ctrl+[, Ctrl+] 를 이용해 실행 속도를 빠르게 할 수 있어요"
|
||||
tip_guide_exists: "화면 상단의 가이드를 클릭해보세요. 유용한 정보를 얻을 수 있습니다."
|
||||
tip_open_source: "코드 컴뱃은 100% 오픈 소스 기반입니다!"
|
||||
# tip_tell_friends: "Enjoying CodeCombat? Tell your friends about us!"
|
||||
tip_tell_friends: "코드 컴뱃을 즐기셨나요? 친구에게 알려주십시오"
|
||||
tip_beta_launch: "코드 컴뱃은 2013년 10월에 베타 서비스를 출시했습니다."
|
||||
tip_think_solution: "해결 방법을 고민해보세요, 문제를 고민하지 말구요"
|
||||
# tip_theory_practice: "In theory, there is no difference between theory and practice. But in practice, there is. - Yogi Berra"
|
||||
|
@ -326,7 +326,7 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# tip_extrapolation: "There are only two kinds of people: those that can extrapolate from incomplete data..."
|
||||
# tip_superpower: "Coding is the closest thing we have to a 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_no_code: "코드가 없는것보다 빠른것은 없습니다."
|
||||
tip_code_never_lies: "코드는 절대로 거짓말을 하지 않는다. 주석은 가끔 하지만. — 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 ‘//’"
|
||||
|
@ -341,8 +341,8 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# tip_recurse: "To iterate is human, to recurse divine. - L. Peter Deutsch"
|
||||
# tip_free_your_mind: "You have to let it all go, Neo. Fear, doubt, and disbelief. Free your mind. - Morpheus"
|
||||
# tip_strong_opponents: "Even the strongest of opponents always has a weakness. - Itachi Uchiha"
|
||||
# tip_paper_and_pen: "Before you start coding, you can always plan with a sheet of paper and a pen."
|
||||
# tip_solve_then_write: "First, solve the problem. Then, write the code. - John Johnson"
|
||||
tip_paper_and_pen: "코딩을 하기전에, 당신은 항상 종이와 펜으로 계획을 지니고 있어야합니다."
|
||||
tip_solve_then_write: "먼저, 문제를 해결하세요. 그러고, 코드를 쓰는겁니다. - John Johnson"
|
||||
|
||||
game_menu:
|
||||
inventory_tab: "인벤토리"
|
||||
|
@ -355,22 +355,22 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
auth_tab: "가입하기"
|
||||
inventory_caption: "장비 장착"
|
||||
choose_hero_caption: "영웅 및 언어 선택 "
|
||||
# save_load_caption: "... and view history"
|
||||
save_load_caption: "... 그리고 기록보기"
|
||||
options_caption: "설정들을 바꾸기"
|
||||
guide_caption: "문서들과 팁들"
|
||||
multiplayer_caption: "친구들과 플레이 하세요!"
|
||||
auth_caption: "진행사항을 저장하세요"
|
||||
|
||||
leaderboard:
|
||||
# view_other_solutions: "View Leaderboards"
|
||||
view_other_solutions: "리더보드 보기"
|
||||
scores: "점수"
|
||||
top_players: "상위 플레이어"
|
||||
day: "오늘"
|
||||
week: "이번 주"
|
||||
# all: "All-Time"
|
||||
all: "모든-시간"
|
||||
time: "시간"
|
||||
# damage_taken: "Damage Taken"
|
||||
# damage_dealt: "Damage Dealt"
|
||||
damage_taken: "데미지 정도"
|
||||
damage_dealt: "죽음을 맞은 데미지"
|
||||
difficulty: "난이도"
|
||||
gold_collected: "수집된 골드"
|
||||
|
||||
|
@ -391,11 +391,11 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
pile_gems: "gem 묶음"
|
||||
chest_gems: "gem 상자"
|
||||
purchasing: "구매중..."
|
||||
declined: "Your card was declined"
|
||||
declined: "귀하의 카드가 거부되었습니다"
|
||||
retrying: "서버에러, 다시 시도하세요."
|
||||
prompt_title: "gem 부족"
|
||||
prompt_body: "gem이 더 필요하신가요?"
|
||||
prompt_button: "Enter Shop"
|
||||
prompt_button: "샵 앤터"
|
||||
recovered: "gem 구매후 브라우져를 새로고침 하세요."
|
||||
price: "x{{gems}} / 한달"
|
||||
|
||||
|
@ -403,10 +403,10 @@ module.exports = nativeDescription: "한국어", englishDescription: "Korean", t
|
|||
# comparison_blurb: "Sharpen your skills with a CodeCombat subscription!"
|
||||
# feature1: "110+ basic levels across 4 worlds"
|
||||
# feature2: "10 powerful <strong>new heroes</strong> with unique skills!"
|
||||
# feature3: "80+ bonus levels"
|
||||
feature3: "80+ 보너스 레벨들"
|
||||
# feature4: "<strong>{{gems}} bonus gems</strong> every month!"
|
||||
# feature5: "Video tutorials"
|
||||
# feature6: "Premium email support"
|
||||
feature5: "영상 튜토리얼"
|
||||
feature6: "프리미엄 이메일 지원"
|
||||
# feature7: "Private <strong>Clans</strong>"
|
||||
free: "프리"
|
||||
month: "달"
|
||||
|
|
|
@ -98,7 +98,7 @@
|
|||
"css-brunch": "^1.7.0",
|
||||
"fs-extra": "^0.26.2",
|
||||
"jade-brunch": "1.7.5",
|
||||
"jasmine": "^2.3.2",
|
||||
"jasmine": "^2.4.1",
|
||||
"javascript-brunch": "> 1.0 < 1.8",
|
||||
"karma": "~0.13",
|
||||
"karma-chrome-launcher": "~0.1.2",
|
||||
|
|
|
@ -38,43 +38,58 @@ if (database.generateMongoConnectionString() !== dbString) {
|
|||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 120; // for long Stripe tests
|
||||
|
||||
describe('Server Test Helper', function() {
|
||||
it('starts the test server', function(done) {
|
||||
var server = require('../../server');
|
||||
server.startServer(done);
|
||||
var initialized = false;
|
||||
beforeEach(function(done) {
|
||||
if (initialized) {
|
||||
return done();
|
||||
}
|
||||
|
||||
var async = require('async');
|
||||
async.series([
|
||||
function(cb) {
|
||||
// Start the server
|
||||
var server = require('../../server');
|
||||
server.startServer(cb);
|
||||
},
|
||||
function(cb) {
|
||||
// 5. Check actual database
|
||||
var User = require('../../server/users/User');
|
||||
User.find({}).count(function(err, count) {
|
||||
// For this to serve as a line of defense against testing with the
|
||||
// production DB, tests must be run with
|
||||
expect(err).toBeNull();
|
||||
expect(count).toBeLessThan(100);
|
||||
if(err || count >= 100) {
|
||||
// the only way to be sure we don't keep going with the tests
|
||||
process.exit(1);
|
||||
}
|
||||
GLOBAL.mc.lists.subscribe = _.noop;
|
||||
cb()
|
||||
});
|
||||
},
|
||||
function(cb) {
|
||||
// Clear db
|
||||
var mongoose = require('mongoose');
|
||||
mongoose.connection.db.command({dropDatabase:1}, function(err, result) {
|
||||
if (err) { console.log(err); }
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function(cb) {
|
||||
// Initialize products
|
||||
var request = require('request');
|
||||
request.get(getURL('/db/products'), function(err, res, body) {
|
||||
expect(err).toBe(null);
|
||||
expect(res.statusCode).toBe(200);
|
||||
cb(err);
|
||||
});
|
||||
}
|
||||
],
|
||||
function(err) {
|
||||
if (err) {
|
||||
process.exit(1);
|
||||
}
|
||||
initialized = true;
|
||||
done();
|
||||
});
|
||||
|
||||
it('checks the db is fairly empty', function(done) {
|
||||
// 5. Check actual database.
|
||||
var User = require('../../server/users/User');
|
||||
User.find({}).count(function(err, count) {
|
||||
// For this to serve as a line of defense against testing with the
|
||||
// production DB, tests must be run with
|
||||
expect(err).toBeNull();
|
||||
expect(count).toBeLessThan(100);
|
||||
if(err || count >= 100) {
|
||||
// the only way to be sure we don't keep going with the tests
|
||||
process.exit(1);
|
||||
}
|
||||
GLOBAL.mc.lists.subscribe = _.noop;
|
||||
done()
|
||||
});
|
||||
});
|
||||
|
||||
it('clears the db', function(done) {
|
||||
var mongoose = require('mongoose');
|
||||
mongoose.connection.db.command({dropDatabase:1}, function(err, result) {
|
||||
if (err) { console.log(err); }
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('initializes products', function(done) {
|
||||
var request = require('request');
|
||||
request.get(getURL('/db/products'), function(err, res, body) {
|
||||
expect(err).toBe(null);
|
||||
expect(res.statusCode).toBe(200);
|
||||
done();
|
||||
});
|
||||
})
|
||||
});
|
Loading…
Reference in a new issue