Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ jobs:
- name: Checkout repository
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
- name: Setup CodeQL
uses: github/codeql-action/init@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2
uses: github/codeql-action/init@312e093a1892bd801f026f1090904ee8e460b9b6 # v2
with:
languages: ${{ matrix.language }}
- name: Perform Analysis
uses: github/codeql-action/analyze@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2
uses: github/codeql-action/analyze@312e093a1892bd801f026f1090904ee8e460b9b6 # v2
22 changes: 11 additions & 11 deletions client/i18n/locales/japanese/intro.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,35 +78,35 @@
"build-a-tribute-page-project": {
"title": "トリビュートページ",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、あなたが選んだ題材に関するトリビュートページを作成します。題材は架空のものでも実在のものでも構いません。"
]
},
"build-a-personal-portfolio-webpage-project": {
"title": "個人ポートフォリオのウェブページ",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、あなた自身の個人ポートフォリオページを作成します。"
]
},
"build-a-product-landing-page-project": {
"title": "プロダクトのランディングページ",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、あなたが選んだプロダクトを売り込むためのランディングページを作成します。"
]
},
"build-a-survey-form-project": {
"title": "アンケートフォーム",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、ユーザーからデータを集めるためのアンケートフォームを作成します。"
]
},
"build-a-technical-documentation-page-project": {
"title": "技術ドキュメントページ",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、あるトピックについての説明書または参考資料として機能する技術ドキュメントページを作成します。"
]
},
Expand Down Expand Up @@ -342,7 +342,7 @@
"title": "フロントエンド開発ライブラリ",
"intro": [
"今やあなたは HTML、CSS、そして JavaScript に精通しているので、業界内で最も一般的なフロントエンドライブラリのいくつかを学習することで技能を向上させましょう。",
"In the Front End Development Libraries Certification, you'll learn how to style your site quickly with Bootstrap. You'll also learn how to add logic to your CSS styles and extend them with Sass.",
"フロントエンド開発ライブラリ認定講座では、Bootstrap でサイトを手軽に整える方法を学習します。Sass を利用して、CSS スタイルに論理的な処理を加えて拡張する方法についても学習します。",
"後ほど、ショッピングカートや他のアプリケーションを構築しながら、強力なシングルページアプリケーション (SPA) を React と Redux で作成する方法を学習します。"
],
"note": "",
Expand Down Expand Up @@ -452,35 +452,35 @@
"build-a-celestial-bodies-database-project": {
"title": "天体データベース",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、PostgreSQL を使用して天体のデータベースを構築します。"
]
},
"build-a-number-guessing-game-project": {
"title": "数当てゲーム",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、Bash のシェルスクリプト、PostgreSQL、Git を使用して、数当てゲームを作成します。ゲームはターミナル内で動作し、ユーザーの情報を保存できるようにします。"
]
},
"build-a-periodic-table-database-project": {
"title": "周期表データベース",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、周期表データベースから化学元素の情報を取得する、Bash スクリプトを作成します。"
]
},
"build-a-salon-appointment-scheduler-project": {
"title": "サロン予約スケジューラー",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、PostgreSQL を使用して、サロンの顧客と予約を管理するインタラクティブな Bash プログラムを作成します。"
]
},
"build-a-world-cup-database-project": {
"title": "ワールドカップデータベース",
"intro": [
"これは認定証を獲得するために必須のプロジェクトの 1 つです。",
"これは認定証の取得に必須のプロジェクトの 1 つです。",
"このプロジェクトでは、PostgreSQL データベースにワールドカップの試合情報を入力し、そこから有用な統計情報を取得する Bash スクリプトを作成します。"
]
},
Expand Down
32 changes: 16 additions & 16 deletions client/i18n/locales/japanese/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
"frontend": "フロントエンド",
"backend": "バックエンド",
"view": "表示",
"view-code": "View Code",
"view-project": "View Project",
"view-code": "コードを表示",
"view-project": "プロジェクトを表示",
"show-cert": "認定証を表示",
"claim-cert": "認定証を取得",
"save-progress": "進行状況を保存",
Expand Down Expand Up @@ -264,7 +264,7 @@
"p8": "そしてこのカリキュラムは何千時間もの実践的なプログラミングの経験を提供します。",
"p9": "また、数学とコンピュータサイエンス理論をさらに学びたいなら、<0>freeCodeCamp の YouTube チャンネル</0> にも何千時間もの動画コースがあります。",
"p10": "開発の仕事やフリーランスの顧客を得たいなら、プログラミングスキルはパズルの一部にすぎません。人とのつながりや開発者としての評判を得ることも必要です。",
"p11": "You can do this on LinkedIn and GitHub, and also on <0>the freeCodeCamp forum</0>.",
"p11": "そのためには LinkedIn GitHub、そして <0>freeCodeCamp フォーラム</0> も活用してください。",
"p12": "コーディングを楽しみましょう!"
},
"upcoming-lessons": "このコースのレッスン",
Expand All @@ -284,7 +284,7 @@
"sign-in-save": "サインインして進行状況を保存",
"download-solution": "回答をダウンロード",
"percent-complete": "{{percent}}% 完了",
"project-complete": "Completed {{completedChallengesInBlock}} of {{totalChallengesInBlock}} certification projects",
"project-complete": "{{totalChallengesInBlock}} 件中 {{completedChallengesInBlock}} 件の認定プロジェクトが完了しました",
"tried-rsa": "すでに <0>Read-Search-Ask (読む - 検索する - 質問する)</0> メソッドを試したなら、freeCodeCamp フォーラムで助けを求めることができます。",
"rsa": "読む (Read)、検索する (Search)、質問する (Ask)",
"rsa-forum": "<strong>新しい投稿を作成する前に</strong>同じ質問が<0>フォーラム</0>で既に回答されていないか確認してください。",
Expand Down Expand Up @@ -326,10 +326,10 @@
"sorry-hang-in-there": "残念ながら、テストが通りませんでした。がんばりましょう。",
"sorry-dont-giveup": "残念ながら、テストが通りませんでした。諦めないでください。",
"challenges-completed": "{{totalChallenges}} 件中 {{completedCount}} 件完了",
"season-greetings-fcc": "Season's Greetings from the freeCodeCamp community 🎉",
"if-getting-value": "If you're getting a lot out of freeCodeCamp, now is a great time to donate to support our nonprofit's mission.",
"building-a-university": "We're Building a Free Computer Science University Degree Program",
"if-help-university": "We've already made a ton of progress. Support our charity with the long road ahead."
"season-greetings-fcc": "freeCodeCamp コミュニティから季節のご挨拶🎉",
"if-getting-value": "freeCodeCamp が役に立ったと感じていただけたなら、寄付を通して当非営利団体の使命をご支援いただけますと幸いです。",
"building-a-university": "freeCodeCamp では無料のコンピューターサイエンス学位プログラムの設立に取り組んでいます。",
"if-help-university": "すでに順調に進んでいますが、この先更に長い道のりが待っています。ぜひ私たちのチャリティー活動をご支援ください。"
},
"donate": {
"title": "非営利団体を支援する",
Expand All @@ -354,7 +354,7 @@
"your-donation": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを提供します。",
"your-donation-2": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを毎月提供します。",
"your-donation-3": "あなたの {{usd}} ドルのご寄付が、世界中の人々に {{hours}} 時間の学びを毎年提供します。",
"become-supporter": "Become a Supporter",
"become-supporter": "サポーターになる",
"duration": "当非営利団体に一回のご支援をいただけますと幸いです。",
"duration-2": "当非営利団体に毎月のご支援をいただけますと幸いです。",
"duration-3": "当非営利団体に毎年のご支援をいただけますと幸いです。",
Expand Down Expand Up @@ -438,7 +438,7 @@
"label": "検索",
"placeholder": "投稿を検索",
"see-results": "{{searchQuery}} のすべての結果を見る",
"no-tutorials": "チュートリアルは見つかりませんでした",
"no-tutorials": "投稿が見つかりませんでした",
"try": "何かお探しですか?このページの検索バーを試してみてください。",
"no-results": "<0>{{query}}</0> に関するものは見つかりませんでした"
},
Expand All @@ -459,7 +459,7 @@
"certification-project": "認定プロジェクト",
"iframe-preview": "{{title}} のプレビュー",
"iframe-alert": "このリンクは通常の環境では他のウェブサイトを開きます。正しく動作しています。これは {{externalLink}} へのリンクです。",
"iframe-form-submit-alert": "Normally this form would be submitted! It works. This will be submitted to: {{externalLink}}",
"iframe-form-submit-alert": "通常はこれでフォームが送信されます。正しく動作しています。フォームは {{externalLink}} へ送信されます。",
"document-notfound": "ドキュメントが見つかりませんでした"
},
"icons": {
Expand Down Expand Up @@ -723,10 +723,10 @@
"navigate-next": "次の課題へ移動"
},
"signout": {
"heading": "Sign out of your account",
"p1": "Warning: If you continue, your progress will no longer be saved.",
"p2": "This action will sign you out of your account on this device and browser session only. Please confirm if you would like to proceed.",
"certain": "Yes, sign out of my account",
"nevermind": "Nevermind, I don't want to sign out"
"heading": "アカウントからサインアウト",
"p1": "注意: サインアウト後は進行状況が保存されません。",
"p2": "この操作では、このデバイスおよびブラウザーセッションのみを対象にサインアウトされます。サインアウトしてよろしいですか?",
"certain": "はい、サインアウトします",
"nevermind": "いいえ、サインアウトしません"
}
}
2 changes: 1 addition & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
"react-responsive": "6.1.2",
"react-scrollable-anchor": "0.6.1",
"react-spinkit": "3.0.0",
"react-tooltip": "4.5.0",
"react-tooltip": "4.5.1",
"react-transition-group": "4.4.5",
"react-youtube": "7.14.0",
"redux": "4.2.0",
Expand Down
5 changes: 3 additions & 2 deletions config/superblock-order.ts
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ export const superBlockOrder: SuperBlockOrder = {
},
[Languages.Japanese]: {
[CurriculumMaps.Landing]: [
SuperBlocks.RespWebDesign,
SuperBlocks.RespWebDesignNew,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.FrontEndDevLibs,
SuperBlocks.DataVis,
Expand All @@ -407,6 +407,7 @@ export const superBlockOrder: SuperBlockOrder = {
[CurriculumMaps.Learn]: {
[TranslationStates.Audited]: {
[SuperBlockStates.Current]: [
SuperBlocks.RespWebDesignNew,
SuperBlocks.RespWebDesign,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.FrontEndDevLibs,
Expand All @@ -425,7 +426,7 @@ export const superBlockOrder: SuperBlockOrder = {
[SuperBlockStates.Legacy]: []
},
[TranslationStates.NotAudited]: {
[SuperBlockStates.Current]: [SuperBlocks.RespWebDesignNew],
[SuperBlockStates.Current]: [],
[SuperBlockStates.New]: [],
[SuperBlockStates.Upcoming]: [SuperBlocks.JsAlgoDataStructNew],
[SuperBlockStates.Legacy]: []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,31 @@ dashedName: reverse-a-string

# --description--

أقلب المقطع النصي المقدم.
Reverse the provided string and return the reversed string.

قد تحتاج إلى تحويل المقطع النصي (string) إلى قائمة قبل أن تتمكن من قلبها.

يجب أن تكون نتيجتك مقطع نصي (string).
For example, `"hello"` should become `"olleh"`.

# --hints--

`reverseString("hello")` يجب أن ينتج مقطع نصي.
`reverseString("hello")` should return a string.

```js
assert(typeof reverseString('hello') === 'string');
```

`reverseString("hello")` يجب أن ينتج مقطع `olleh`.
`reverseString("hello")` should return the string `olleh`.

```js
assert(reverseString('hello') === 'olleh');
```

`reverseString("Howdy")` يجب أن ينتج مقطع `ydwoH`.
`reverseString("Howdy")` should return the string `ydwoH`.

```js
assert(reverseString('Howdy') === 'ydwoH');
```

`reverseString("Greetings from Earth")` يجب أن ينتج المقطع `htraE morf sgniteerG`.
`reverseString("Greetings from Earth")` should return the string `htraE morf sgniteerG`.

```js
assert(reverseString('Greetings from Earth') === 'htraE morf sgniteerG');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ assert(
);
```

يجب تعريف `setter`.
A `setter` should be defined.

```js
assert(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ dashedName: extract-state-logic-to-redux

# --description--

الآن بعد الانتهاء من مكون React، تحتاج إلى نقل المنطق الذي يُقوم به محليا في `state` إلى Redux. هذه هي الخطوة الأولى لتوصيل تطبيق React البسيط إلى Redux. الوظيفة الوحيدة لتطبيقك هي إضافة رسائل جديدة من المستخدم إلى قائمة غير منظمة (unordered list). المثال بسيط من أجل توضيح كيفية عمل React و Redux معا.
الآن بعد الانتهاء من مكون (component) في React، تحتاج إلى نقل المنطق الذي يُقوم به محليا في `state` إلى Redux. هذه هي الخطوة الأولى لتوصيل تطبيق React البسيط إلى Redux. الوظيفة الوحيدة لتطبيقك هي إضافة رسائل جديدة من المستخدم إلى قائمة غير منظمة (unordered list). المثال بسيط من أجل توضيح كيفية عمل React و Redux معا.

# --instructions--

أولاً، حدد نوع الإجراء `ADD` ثم عيّنه إلى ثابت باسم `ADD`. بعد ذلك، حدد منشئ العمل `addMessage()` الذي ينشئ الإجراء لإضافة رسالة. ستحتاج إلى تمرير `message` إلى منشئ الإجراءات (action creator) وإدراج الرسالة في `action` الذي تم أنشئه.

ثم إنشاء مختصر يسمى `messageReducer()` الذي يتعامل مع الحالة للرسائل. يجب أن تساوي حالة أولى القائمة الفارغة. يجب أن يضيف هذا reducer رسالة إلى قائمة الرسائل المحفوظة في الحالة أو أن يعيد الحالة الحالية. أخيراً، أنشئ متجر Redux ومرر به reducer.
ثم إنشاء مختصر (reducer) يسمى `messageReducer()` الذي يتعامل مع الحالة (state) للرسائل. يجب أن تساوي حالة (state) أولى القائمة (array) الفارغة. يجب أن يضيف هذا reducer رسالة إلى قائمة (array) الرسائل المحفوظة في الحالة (state) أو أن ينتج الحالة (state) الحالية. أخيراً، أنشئ متجر Redux ومرر به reducer.

# --hints--

Expand All @@ -41,7 +41,7 @@ assert(
assert(typeof messageReducer === 'function');
```

يجب أن يكون المتجر موجوداً وأن تكون لديه حالة أولية إلى قائمة فارغة.
يجب أن يكون المتجر (store) موجوداً وأن تكون لديه حالة (state) أولية إلى قائمة (array) فارغة.

```js
assert(
Expand All @@ -52,7 +52,7 @@ assert(
);
```

إرسال `addMessage` إلى المتجر يجب أن يضيف رسالة جديدة بشكل ثابت إلى قائمة من الرسائل المحفوظة في الحالة.
إرسال (store) متغير `addMessage` إلى المتجر (store) يجب أن يضيف رسالة جديدة بشكل ثابت (immutably) إلى قائمة (array) من الرسائل المحفوظة في الحالة (state).

```js
assert(
Expand All @@ -66,7 +66,7 @@ assert(
);
```

يجب أن ينتج `messageReducer` الحالة الحالية إذا تم الاتصال بها مع أي إجراءات أخرى.
يجب أن ينتج `messageReducer` الحالة (state) الحالية إذا تم الاتصال بها مع أي إجراءات (actions) أخرى.

```js
assert(
Expand Down
Loading