diff --git a/client/i18n/locales/korean/links.json b/client/i18n/locales/korean/links.json new file mode 100644 index 00000000000..f0b46c3470a --- /dev/null +++ b/client/i18n/locales/korean/links.json @@ -0,0 +1,40 @@ +{ + "help-translate-link-url": "https://contribute.freecodecamp.org/#/how-to-translate-files", + "top-contributors": "https://www.freecodecamp.org/news/freecodecamp-top-contributors/", + "footer": { + "about-url": "https://www.freecodecamp.org/news/about/", + "shop-url": "https://www.freecodecamp.org/shop/", + "support-url": "https://www.freecodecamp.org/news/support/", + "sponsors-url": "https://www.freecodecamp.org/news/sponsors/", + "honesty-url": "https://www.freecodecamp.org/news/academic-honesty-policy/", + "coc-url": "https://www.freecodecamp.org/news/code-of-conduct/", + "privacy-url": "https://www.freecodecamp.org/news/privacy-policy/", + "tos-url": "https://www.freecodecamp.org/news/terms-of-service/", + "copyright-url": "https://www.freecodecamp.org/news/copyright-policy/" + }, + "donate": { + "other-ways-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp", + "download-irs-url": "https://s3.amazonaws.com/freecodecamp/Free+Code+Camp+Inc+IRS+Determination+Letter.pdf", + "download-990-url": "https://freecodecamp.s3.amazonaws.com/freeCodeCamp+2019+f990.pdf", + "one-time-url": "https://paypal.me/freecodecamp", + "one-time-external-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp/#how-can-i-make-a-one-time-donation", + "mail-check-url": "https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp/#can-i-mail-a-physical-check" + }, + "nav": { + "contribute": "https://contribute.freecodecamp.org/#/", + "forum": "https://forum.freecodecamp.org/", + "news": "https://www.freecodecamp.org/korean/news/search/", + "podcast": "https://freecodecamp.libsyn.com/" + }, + "help": { + "HTML-CSS": "HTML-CSS", + "JavaScript": "JavaScript", + "Python": "Python", + "Backend Development": "Backend Development", + "C-Sharp": "C-Sharp", + "English": "English", + "Odin": "The Odin Project", + "Euler": "Project Euler", + "Rosetta": "Rosetta Code" + } +} diff --git a/client/i18n/locales/korean/meta-tags.json b/client/i18n/locales/korean/meta-tags.json new file mode 100644 index 00000000000..753bae28af1 --- /dev/null +++ b/client/i18n/locales/korean/meta-tags.json @@ -0,0 +1,48 @@ +{ + "title": "무료로 코딩 배우기 — 바쁜 현대인을 위한 프로그래밍 학습 사이트", + "description": "무료로 코딩 배우기", + "social-description": "무료로 코딩 배우기", + "keywords": [ + "python", + "javascript", + "js", + "git", + "github", + "website", + "web", + "development", + "free", + "code", + "camp", + "course", + "courses", + "html", + "css", + "react", + "redux", + "api", + "front", + "back", + "end", + "learn", + "tutorial", + "programming", + "프로그래밍", + "코딩", + "파이썬", + "자바스크립트", + "웹", + "개발", + "튜토리얼", + "깃허브", + "무료", + "리액트", + "리덕스", + "웹사이트", + "배우기", + "프론트엔드", + "백엔드", + "깃" + ], + "youre-unsubscribed": "You have been unsubscribed" +} diff --git a/client/i18n/locales/korean/motivation.json b/client/i18n/locales/korean/motivation.json new file mode 100644 index 00000000000..34c105b9057 --- /dev/null +++ b/client/i18n/locales/korean/motivation.json @@ -0,0 +1,195 @@ +{ + "compliments": [ + "정말 자랑스러워요!", + "대단해요!", + "한 발자국 나아간 당신, 축하해요!", + "이 노력에 대한 보람은 무한할거예요.", + "당신은 꾸준히 나아가고 있어요!", + "당당하게 나아가는 모습이 멋져요!", + "바로 그거예요!", + "명중!", + "지화자!", + "무한 감탄중!", + "앵콜!", + "대.박.", + "무한 감탄중!", + "어마어마한 능력자군요!", + "얼쑤!", + "정상을 향해!", + "홈런입니다!", + "슛~ 골!", + "어벤져스도 감탄할 만한 실력!", + "기립 박수를 받으세요!", + "그 누구도 멈출 수 없다!", + "레벨 업!", + "풀파워 모드!", + "깔끔히 끝냈어요.", + "멋져요!", + "최고!", + "앵콜!", + "이 해피엔딩 영화의 주인공은 당신!", + "화이팅! 해야죠!" + ], + "motivationalQuotes": [ + { + "quote": "노력을 이기는 재능은 없고, 노력을 외면하는 결과도 없다.", + "author": "이창호" + }, + { + "quote": "열정을 잃지 않고 실패에서 실패로 걸어가는 것이 성공이다.", + "author": "윈스턴 처칠" + }, + { + "quote": "추구할 수 있는 용기가 있다면 우리의 모든 꿈은 이뤄질 수 있다.", + "author": "월트 디즈니" + }, + { + "quote": "어떤 일도 성공은 근본적인 성실함에서 시작된다.", + "author": "알렉산더 그래햄 벨" + }, + { + "quote": "성공은 자신의 잠재력을 최대한으로 발휘하는 것이다.", + "author": "지그 지글러" + }, + { + "quote": "기회는 일어나는 것이 아니라 만들어내는 것이다.", + "author": "크리스 그로서" + }, + { + "quote": "성공적인 삶의 비밀은 무엇을 하는 게 자신의 운명인지 찾아낸 다음 그걸 하는 것이다.", + "author": "헨리 포드" + }, + { + "quote": "당신이 할 수 있다고 믿든 할 수 없다고 믿든, 둘 다 맞다.", + "author": "헨리 포드" + }, + { + "quote": "매일 작은 변화를 이뤄 나가라, 그리하면 큰 성취가 이뤄진다.", + "author": "미상" + }, + { + "quote": "우리의 삶은 우리의 생각에 의해 형성된다.", + "author": "부처님" + }, + { + "quote": "당신이 원하는 것을 얻기 위해 필요한 것은 행동하라.", + "author": "아인슈타인" + }, + { + "quote": "지나간 것을 후회하지 말고, 앞으로 할 일에 집중하라.", + "author": "스티브 잡스" + }, + { + "quote": "성공은 두려움을 극복하는 능력에서 비롯된다.", + "author": "빌 코스비" + }, + { + "quote": "눈을 감고, 당신이 원하는 것을 상상하라. 그 후, 열어봐라.", + "author": "아인슈타인" + }, + { + "quote": "게으른 예술가가 만든 명작은 없다.", + "author": "미상" + }, + { + "quote": "나는 내가 더 노력할수록 운이 더 좋아진다는 걸 발견했다.", + "author": "토마스 재퍼슨" + }, + { + "quote": "모든 성취의 시작점은 갈망이다.", + "author": "나폴레옹 힐" + }, + { + "quote": "성공은 매일 반복한 작은 노력들의 합이다.", + "author": "로버트 콜리어" + }, + { + "quote": "처음부터 겁먹지 말자, 막상 가보면 아무것도 아닌 게 세상에는 참으로 많다", + "author": "김연아" + }, + { + "quote": "99도까지 죽을힘을 다하여 온도를 올려도 마지막 1도를 올리지 못하면 물은 영원히 끓지 않는다", + "author": "김연아" + }, + { + "quote": "나는 뛰다가 쓰러질지언정 결코 기권하지는 않겠다.", + "author": "서윤복" + }, + { + "quote": "우리는 우리가 늘 생각하는 것이 된다. 그것이 가장 묘한 비밀이다.", + "author": "얼 나이팅게일" + }, + { + "quote": "성공이란 당신 자신, 당신이 하는 일, 그 일을 하는 방식을 좋아하는 것이다.", + "author": "마야 앤젤루" + }, + { + "quote": "노력 없는 꿈은 환상이다", + "author": "박지성" + }, + { + "quote": "한 발씩 딛고 올라서려면 패배감부터 버려야 한다.", + "author": "박지성" + }, + { + "quote": "사람들이 인생에서 실패하는 가장 큰 이유는 친구, 가족, 이웃들의 말을 듣기 때문이다.", + "author": "나폴레옹 힐" + }, + { + "quote": "운은 용기를 내는 사람의 편이다.", + "author": "베르길리우스" + }, + { + "quote": "소인배는 불운에 길들여지고 눌린다. 그러나 위대한 사람들은 불운 위로 올라선다.", + "author": "워싱턴 어빙" + }, + { + "quote": "당신의 믿음은 당신이 가질 수 있는 것들을 결정합니다.", + "author": "오데트 오툴" + }, + { + "quote": "당신이 바라는 삶을 살기 위해 현재의 삶을 변화시켜야 합니다.", + "author": "스티브 마브론" + }, + { + "quote": "불가능은 아직 시도해 보지 않은 것일 뿐입니다.", + "author": "존 로스킨" + }, + { + "quote": "목표를 이루기 위해서는 먼저 목표를 가진다는 것이 중요합니다.", + "author": "조지 루시" + }, + { + "quote": "목표를 위해 노력할 때 성장하고, 성장할 때 목표를 이루게 됩니다.", + "author": "진 리디얼" + }, + { + "quote": "망설이지 말고 그저 해보세요. 당신은 더 할 수 있습니다.", + "author": "로버트 H. 슐러" + }, + { + "quote": "가장 큰 위험은 아무것도 하지 않는 것입니다.", + "author": "윌리엄 H. 테일러" + }, + { + "quote": "지금이 바로 시작하기 좋은 때이다. 모든 것은 현재부터 시작된다.", + "author": "솔로몬" + }, + { + "quote": "할 수 있다고 믿으세요. 그러면 절반쯤 왔습니다.", + "author": "시어도어 루즈벨트" + }, + { + "quote": "시작하기 위해 위대해질 필요는 없지만, 위대해지려면 시작해야 합니다.", + "author": "지그 지글러" + }, + { + "quote": "나는 실패하지 않았습니다. 나는 단지 작동하지 않는 10,000가지 방법을 발견했을 뿐입니다.", + "author": "토마스 에디슨" + }, + { + "quote": "완벽한 것이 아닙니다. 노력이 중요합니다. 매일 노력하면 변화가 일어납니다. 그렇게 변화가 일어납니다.", + "author": "질리언 마이클스" + } + ] +} diff --git a/client/src/utils/algolia-locale-setup.ts b/client/src/utils/algolia-locale-setup.ts index e3a97ca5c27..0a3b07399a3 100644 --- a/client/src/utils/algolia-locale-setup.ts +++ b/client/src/utils/algolia-locale-setup.ts @@ -50,6 +50,10 @@ const algoliaIndices = { swahili: { name: 'news-sw', searchPage: 'https://www.freecodecamp.org/swahili/news/search/' + }, + korean: { + name: 'news-ko', + searchPage: 'https://www.freecodecamp.org/korean/news/search/' } }; diff --git a/shared/config/i18n.ts b/shared/config/i18n.ts index 403022ba1fd..71b847675da 100644 --- a/shared/config/i18n.ts +++ b/shared/config/i18n.ts @@ -9,7 +9,8 @@ export enum Languages { Japanese = 'japanese', German = 'german', Arabic = 'arabic', - Swahili = 'swahili' + Swahili = 'swahili', + Korean = 'korean' } /* @@ -32,7 +33,8 @@ export const availableLangs = { Languages.Japanese, Languages.German, Languages.Arabic, - Languages.Swahili + Languages.Swahili, + Languages.Korean ], curriculum: [ Languages.English, @@ -45,7 +47,8 @@ export const availableLangs = { Languages.Japanese, Languages.German, Languages.Arabic, - Languages.Swahili + Languages.Swahili, + Languages.Korean ] }; @@ -68,7 +71,8 @@ export const i18nextCodes = { [Languages.Japanese]: 'ja', [Languages.German]: 'de', [Languages.Arabic]: 'ar', - [Languages.Swahili]: 'sw' + [Languages.Swahili]: 'sw', + [Languages.Korean]: 'ko' }; // These are for the language selector dropdown menu in the footer @@ -83,7 +87,8 @@ export const LangNames: { [key: string]: string } = { [Languages.Japanese]: '日本語', [Languages.German]: 'Deutsch', [Languages.Arabic]: 'العربية', - [Languages.Swahili]: 'Swahili' + [Languages.Swahili]: 'Swahili', + [Languages.Korean]: '한국어' }; /* These are for formatting dates and numbers. Used with JS .toLocaleString(). @@ -101,13 +106,14 @@ export const LangCodes = { [Languages.Japanese]: 'ja', [Languages.German]: 'de', [Languages.Arabic]: 'ar', - [Languages.Swahili]: 'sw' + [Languages.Swahili]: 'sw', + [Languages.Korean]: 'ko' }; /** * This array contains languages that should NOT appear in the language selector. */ -export const hiddenLangs = [Languages.Arabic]; +export const hiddenLangs = [Languages.Arabic, Languages.Korean]; /** * This array contains languages that use the RTL layouts. diff --git a/shared/config/superblocks.ts b/shared/config/superblocks.ts index 7870bb72962..01f31a7b913 100644 --- a/shared/config/superblocks.ts +++ b/shared/config/superblocks.ts @@ -221,6 +221,30 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { SuperBlocks.UpcomingPython, SuperBlocks.A2English, SuperBlocks.PythonForEverybody + ], + [Languages.Korean]: [ + SuperBlocks.RespWebDesignNew, + SuperBlocks.JsAlgoDataStruct, + SuperBlocks.BackEndDevApis, + SuperBlocks.QualityAssurance, + SuperBlocks.SciCompPy, + SuperBlocks.DataAnalysisPy, + SuperBlocks.InfoSec, + SuperBlocks.MachineLearningPy, + SuperBlocks.CollegeAlgebraPy, + SuperBlocks.FoundationalCSharp, + SuperBlocks.CodingInterviewPrep, + SuperBlocks.ProjectEuler, + SuperBlocks.TheOdinProject, + SuperBlocks.FrontEndDevLibs, + SuperBlocks.JsAlgoDataStructNew, + SuperBlocks.UpcomingPython, + SuperBlocks.A2English, + SuperBlocks.PythonForEverybody, + SuperBlocks.DataVis, + SuperBlocks.RelationalDb, + SuperBlocks.ExampleCertification, + SuperBlocks.RosettaCode ] };