Skip to content

Commit 4a81e65

Browse files
committed
Merge pull request vuejs#30 from kazupon/translation
Translation for japanese
2 parents ce9d096 + b42c99a commit 4a81e65

19 files changed

+971
-0
lines changed

docs/LANGS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
* [English](en/)
22
* [简体中文](zh-cn/)
3+
* [日本語](ja/)

docs/ja/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SUMMARY.md

docs/ja/SUMMARY.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Table of Contents
2+
3+
- [Vuex は何ですか?](intro.md)
4+
- [中核概念](concepts.md)
5+
- [ステート](state.md)
6+
- [ミューテーション](mutations.md)
7+
- [アクション](actions.md)
8+
- [データフロー](data-flow.md)
9+
- [アプリケーションの構造](structure.md)
10+
- [ミドルウェア](middlewares.md)
11+
- [厳格モード](strict.md)
12+
- [フォームのハンドリング](forms.md)
13+
- [テスト](testing.md)
14+
- [ホットリローディング](hot-reload.md)
15+
- [API リファレンス](api.md)

docs/ja/actions.md

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# アクション
2+
3+
アクションはミューテーションをディスパッチする機能です。アクションは非同期にすることができ、単一アクションは複数のミューテーションをディスパッチできます。
4+
5+
アクションは何かが起こるための意向を表しており、それを呼び出すコンポーネントから離れて詳細を抽象化します。コンポーネントが何かしたい場合アクション呼び出します。アクションはステート変化をもたらすため、コールバックまたは戻り値について心配する必要はなく、そしてステート変化は更新するコンポーネントの DOM をトリガします。コンポーネントは、アクションが実際に行われている方法から、完全に切り離されます。
6+
7+
それゆえ、通常アクション内部のデータエンドポイントへの API 呼び出しを行い、そしてアクションを呼び出すコンポーネントの両方から非同期に詳細を隠し、さらにミューテーションはアクションによってトリガされます。
8+
9+
> Vuex のアクションは純粋な Flux の定義では実際には "アクションクリエータ (action creators)" ですが、私はその用語は便利よりも混乱していると見ています。
10+
11+
### 単純なアクション
12+
13+
アクションは単純に単一のミューテーションをトリガするのが一般的です。Vuex はそのようなアクションの定義するために省略記法を提供します:
14+
15+
``` js
16+
const store = new Vuex.Store({
17+
state: {
18+
count: 1
19+
},
20+
mutations: {
21+
INCREMENT (state, x) {
22+
state.count += x
23+
}
24+
},
25+
actions: {
26+
// 省略記法
27+
// ミューテーション名を提供する
28+
increment: 'INCREMENT'
29+
}
30+
})
31+
```
32+
33+
今、アクションを呼び出すとき:
34+
35+
``` js
36+
store.actions.increment(1)
37+
```
38+
39+
単純に私たちに対して以下を呼び出します:
40+
41+
``` js
42+
store.dispatch('INCREMENT', 1)
43+
```
44+
45+
アクションに渡される任意の引数は、ミューテーションハンドラに渡されることに注意してください。
46+
47+
### 標準なアクション
48+
49+
現在のステートに依存しているロジック、または非同期な操作を必要とするアクションについては、それらを関数として定義します。アクション関数は常に第1引数として呼び出す store を取得します:
50+
51+
``` js
52+
const vuex = new Vuex({
53+
state: {
54+
count: 1
55+
},
56+
mutations: {
57+
INCREMENT (state, x) {
58+
state += x
59+
}
60+
},
61+
actions: {
62+
incrementIfOdd: (store, x) => {
63+
if ((store.state.count + 1) % 2 === 0) {
64+
store.dispatch('INCREMENT', x)
65+
}
66+
}
67+
}
68+
})
69+
```
70+
71+
72+
関数本体それほど冗長にしない ES6 の argument destructuring を使用するのが一般的です(ここでは、`dispatch` 関数は store インスタンスに事前にバインドされているように、それをメソッドとして呼び出す必要はありません):
73+
74+
``` js
75+
// ...
76+
actions: {
77+
incrementIfOdd: ({ dispatch, state }, x) => {
78+
if ((state.count + 1) % 2 === 0) {
79+
dispatch('INCREMENT', x)
80+
}
81+
}
82+
}
83+
```
84+
85+
以下のように、文字列省略記法は基本的に糖衣構文 (syntax sugar) です:
86+
87+
``` js
88+
actions: {
89+
increment: 'INCREMENT'
90+
}
91+
// 以下に相当 ... :
92+
actions: {
93+
increment: ({ dispatch }, ...payload) => {
94+
dispatch('INCREMENT', ...payload)
95+
}
96+
}
97+
```
98+
99+
### 非同期なアクション
100+
101+
非同期なアクションの定義に対して同じ構文を使用することができます:
102+
103+
``` js
104+
// ...
105+
actions: {
106+
incrementAsync: ({ dispatch }, x) => {
107+
setTimeout(() => {
108+
dispatch('INCREMENT', x)
109+
}, 1000)
110+
}
111+
}
112+
```
113+
114+
より実践的な例はショッピングカートをチェックアウトする場合です。複数のミューテーションをトリガする必要がある場合があります。チェックアウトを開始されたとき、成功、そして失敗の例を示します:
115+
116+
``` js
117+
// ...
118+
actions: {
119+
checkout: ({ dispatch, state }, products) => {
120+
// カートアイテムで現在のアイテムを保存する
121+
const savedCartItems = [...state.cart.added]
122+
// チェックアウトリクエストを送り出し、
123+
// 楽観的にカートをクリアします
124+
dispatch(types.CHECKOUT_REQUEST)
125+
// shop API は成功コールバックと失敗コールバックを受け入れます
126+
shop.buyProducts(
127+
products,
128+
// 成功処理
129+
() => dispatch(types.CHECKOUT_SUCCESS),
130+
// 失敗処理
131+
() => dispatch(types.CHECKOUT_FAILURE, savedCartItems)
132+
)
133+
}
134+
}
135+
```
136+
137+
また、全てのコンポーネントは全体のチェックアウトを行うために `vuex.actions.checkout(products)` を呼び出す必要があります。

docs/ja/api.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# API リファレンス
2+
3+
### Vuex.Store
4+
5+
``` js
6+
import Vuex from 'vuex'
7+
8+
const store = new Vuex.Store({ ...options })
9+
```
10+
11+
### Vuex.Store コンストラクタオプション
12+
13+
- **state**
14+
15+
- 型: `Object`
16+
17+
Vuex store 向けの root なステートオブジェクト
18+
19+
[詳細](state.md)
20+
21+
- **mutations**
22+
23+
- 型: `Object | Array<Object>`
24+
25+
各エントリキーがミューテーション名とその値がミューテーションハンドラ関数である値であるオブジェクト。ハンドラ関数は常に第1引数として`state` を受信し、そして次のディスパッチ呼び出しに渡される全ての引数を受信する
26+
27+
オブジェクトの配列を渡す場合は、これらオブジェクトは自動的に最後のオブジェクトにいっしょにマージされる
28+
29+
[詳細](mutations.md)
30+
31+
- **actions**
32+
33+
- 型: `Object | Array<Object>`
34+
35+
各エントリキーがアクション名とその値のいずれかであるオブジェクト
36+
37+
1. ミューテーション名の文字列。または、
38+
2. 第1引数として store を受信する関数、第2引数以降は追加されたペイロード引数
39+
40+
Vuex はこれらエントリを処理し、そして実際に呼び出し可能なアクション関数を作成し、さらに store の `actions` プロパティを公開する
41+
42+
オブジェクトの配列を渡す場合は、これらオブジェクトは自動的に最後のオブジェクトにいっしょにマージされる
43+
44+
[詳細](actions.md)
45+
46+
- **middlewares**
47+
48+
- 型: `Array<Object>`
49+
50+
ミドルウェアオブジェクトの配列で以下のような形式であること:
51+
52+
``` js
53+
{
54+
snapshot: Boolean, // default: false
55+
onInit: Function,
56+
onMutation: Function
57+
}
58+
```
59+
60+
全てのフィールドは任意 [詳細](middlewares.md)
61+
62+
- **strict**
63+
64+
-: `Boolean`
65+
- デフォルト値: `false`
66+
67+
Vuex store を 厳格モードに強制する。厳格モードではミューテーションハンドラの外側の Vuex ステートに任意に変異するとき、エラーを投げる
68+
69+
[詳細](strict.md)
70+
71+
### Vuex.Store インスタンスプロパティ
72+
73+
- **state**
74+
75+
-: `Object`
76+
77+
root なステート。読み取り専用
78+
79+
- **actions**
80+
81+
-: `Object`
82+
83+
呼び出し可能なアクション関数
84+
85+
### Vuex.Store インスタンスメソッド
86+
87+
- **dispatch(mutationName: String, ...args)**
88+
89+
直接ミューテーションをディスパッチする。これは一般的には、アプリケーションコードでアクションを使用するほうが必要な場合のような、特定の状況で有用
90+
91+
- **hotUpdate(newOptions: Object)**
92+
93+
ホットスワップな新しいアクションとミューテーション [詳細](hot-reload.md)

docs/ja/book.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../book.json

docs/ja/concepts.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# 中核概念
2+
3+
Vuex Store を作成するために `Vuex.Store` コンストラクタを使用できます。ほとんどの場合、各アプリケーション毎に単独の store だけが必要になります。各 Vuex Store は 3 種類の "構成要素" からなります:
4+
5+
- **ステート**: アプリケーション状態を表すプレーンなオブジェクト
6+
7+
- **ミューテーション**: 状態を変異させる関数。ミューテーションは**同期**必須
8+
9+
- **アクション**: ミューテーションをディスパッチする関数。アクションは非同期操作を含めることができ、複数のミューテーションをディスパッチすることができます
10+
11+
どうして、状態を操作する単純な機能よりもむしろ、*ミューテーション**アクション*を区別したいのでしょうか?その理由は、**ミューテーションを分離したいのと非同期**のためです。多くの複雑なアプリケーションは 2 つの組合せから成り立ちます。分離すると、それら両方を調査することが容易になり、そしてそれらのためのテストを書くこともできます。
12+
13+
> Flux について精通している場合、ここでの用語/概念の違いがあることに注意してください。Vuex のアクションは Flux の**アクションクリエータ (action creators)** と同等でありますが、Vuex のミューテーションは Flux の **アクション (actions)** に相当します。
14+
15+
### Vuex Store の作成
16+
17+
> **NOTE:** 残りのドキュメント向けのコード例に対して ES2015 シンタックスを使用します。それについて理解できない場合は、[ここで](https://babeljs.io/docs/learn-es2015/)で学習してください!ドキュメントは既に[大規模アプリケーションの構築](http://vuejs.org/guide/application.html)で説明した概念にに精通している前提としています。
18+
19+
Vuex Store を作成することは非常に簡単です。上記の構成要素を一緒に入れると下記になります:
20+
21+
``` js
22+
import Vuex from 'vuex'
23+
24+
const store = new Vuex.Store({
25+
state: { ... },
26+
actions: { ... },
27+
mutations: { ... }
28+
})
29+
```
30+
31+
一度作成すると、ステートは `store.state` 経由、アクションは `store.actions` 経由でアクセスすることができます。ミューテーション関数は直接アクセスすることはできません。ミューテーション関数は、アクションによるトリガされた時だけ、もしくは `store.dispatch()` を呼び出すときにアクセスできます。次の詳細で各概念について説明します。

docs/ja/data-flow.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# データフロー
2+
3+
Vuex アプリケーション内部のデータフローをより理解を得るために、Vuex で単純にカウンタするアプリケーションを構築してみましょう。これは概念を説明する目的のための簡単な例であることに注意してください。実際には、このような単純なタスクのために Vuex は必要ありません。
4+
5+
### セットアップ
6+
7+
``` js
8+
// store.js
9+
import Vue from 'vue'
10+
import Vuex from 'vuex'
11+
12+
Vue.use(Vuex)
13+
```
14+
15+
### アプリケーションのステートを定義
16+
17+
``` js
18+
const state = {
19+
count: 0
20+
}
21+
```
22+
23+
### ステート可能なミューテーションを定義
24+
25+
``` js
26+
const mutations = {
27+
INCREMENT (state) {
28+
state.count++
29+
},
30+
DECREMENT (state) {
31+
state.count--
32+
}
33+
}
34+
```
35+
36+
### 呼び出し可能なアクションを定義
37+
38+
``` js
39+
const actions = {
40+
increment: 'INCREMENT',
41+
decrement: 'DECREMENT'
42+
}
43+
```
44+
45+
### Vuex Store を作成
46+
47+
``` js
48+
export default new Vuex.Store({
49+
state,
50+
mutations,
51+
actions
52+
})
53+
```
54+
55+
### Vue コンポーネントでの使用
56+
57+
**テンプレート**
58+
59+
``` html
60+
<div>
61+
Clicked: {{ count }} times
62+
<button v-on:click="increment">+</button>
63+
<button v-on:click="decrement">-</button>
64+
</div>
65+
```
66+
67+
**スクリプト**
68+
69+
``` js
70+
import store from './store.js'
71+
72+
export default {
73+
computed: {
74+
// 算出プロパティ(computed property) を使用してステートにバインド
75+
count () {
76+
return store.state.count
77+
}
78+
},
79+
methods: {
80+
increment: store.actions.increment,
81+
decrement: store.actions.decrement
82+
}
83+
}
84+
```
85+
86+
ここでは、コンポーネントが非常に単純であることに注意しましょう。それは単に Vuex store からいくつかのステートを表示し(データそれ自身でさえ所有しません)、そしてユーザー入力イベントでいくつかの store のアクションを呼び出します。
87+
88+
Flux であるような、データの流れが一方向であることに注意しましょう:
89+
90+
<p align="center">
91+
<img width="700px" src="vuex.png">
92+
</p>

0 commit comments

Comments
 (0)