浏览代码

Russian translation updates (#572)

* russian docs translation started

* docs/ru/actions.md translated

* docs/ru/api.md translated

* docs/ru/forms.md translated

* api translation fix

* docs/ru/getters.md translated

* docs/ru/getting-started.md translated

* docs/ru/hot-reload.md translated

* docs/ru/installation.md translated

* docs/ru/intro.md translated

* docs/ru/modules.md translated

* docs/ru/README.md translated

* docs/ru/strict.md translated

* docs/ru/structure.md translated

* docs/ru/SUMMARY.md translated (O_O for some reason it happens to be exactly the same as README.md)

* docs/ru/mutations.md translated

* docs/ru/plugins.md translated

* docs/ru/state.md translated

* docs/ru/testing.md translated

* docs/ru/actions.md styling/proof-reading

* docs/ru/api.md styling/proof-reading

* docs/ru/forms.md styling/proof-reading

* docs/ru/getters.md styling/proof-reading

* docs/ru/getting-started.md styling/proof-reading

* docs/ru/hot-reload.md styling/proof-reading

* docs/ru/installation.md styling/proof-reading

* docs/ru/intro.md styling/proof-reading

* docs/ru/modules.md styling/proof-reading

* docs/ru/mutations.md styling/proof-reading

* docs/ru/plugins.md styling/proof-reading

* docs/ru/state.md styling/proof-reading

* docs/ru/strict.md styling/proof-reading

* docs/ru/structure.md styling/proof-reading

* docs/ru/testing.md styling/proof-reading

* docs/ru/intro.md typo fix

* Copyediting RU documentation

* Fix typo

* Change wording around alternative approaches to data handling

* Fix typo

* Fix typo

* Better wording for linters

* Fix header and change wording

* fix typo

* typos reported by @ipelekhan are fixed

* Russian docs translation update

* Fix typo

* Sentence rephrasing and fix punctuation

* Переключил на ветку translation-ru
Grigoriy Beziuk 8 年之前
父节点
当前提交
d3d7604d3d
共有 8 个文件被更改,包括 150 次插入38 次删除
  1. 4 2
      docs/ru/SUMMARY.md
  2. 14 5
      docs/ru/api.md
  3. 3 3
      docs/ru/book.json
  4. 1 1
      docs/ru/getting-started.md
  5. 二进制
      docs/ru/images/flow.png
  6. 二进制
      docs/ru/images/vuex.png
  7. 127 26
      docs/ru/modules.md
  8. 1 1
      docs/ru/structure.md

+ 4 - 2
docs/ru/SUMMARY.md

@@ -1,9 +1,11 @@
 # Vuex
 
+<!--email_off-->
 > Внимание: это — документация для версии vuex@2.x.
+<!--/email_off-->
 
-- [Ищете документацию для 1.0?](https://github.com/vuejs/vuex/tree/1.0/docs)
-- [Release Notes](https://github.com/vuejs/vuex/releases)
+- [Нужна документация для 1.0?](https://github.com/vuejs/vuex/tree/1.0/docs)
+- [История изменений](https://github.com/vuejs/vuex/releases)
 - [Установка](installation.md)
 - [Что такое Vuex?](intro.md)
 - [Начало работы](getting-started.md)

+ 14 - 5
docs/ru/api.md

@@ -69,7 +69,8 @@ const store = new Vuex.Store({ ...options })
     {
       key: {
         state,
-        mutations,
+        namespaced?,
+        mutations?,
         actions?,
         getters?,
         modules?
@@ -160,18 +161,26 @@ const store = new Vuex.Store({ ...options })
 
 ### Вспомогательные функции для связывания с компонентами
 
-- **`mapState(map: Array<string> | Object): Object`**
+- **`mapState(namespace?: string, map: Array<string> | Object): Object`**
 
   Создаёт проксирующие вычисляемые свойства компонента, возвращающие поддерево state'а хранилища Vuex [Подробнее](state.md#the-mapstate-helper)
 
-- **`mapGetters(map: Array<string> | Object): Object`**
+  Первый аргумент опционально может быть строкой с указанным namespace. [Подробнее](modules.md#binding-helpers-with-namespace)
+
+- **`mapGetters(namespace?: string, map: Array<string> | Object): Object`**
 
   Создаёт проксирующие вычисляемые свойства компонента, проксирующие доступ к геттерам. [Подробнее](getters.md#the-mapgetters-helper)
 
-- **`mapActions(map: Array<string> | Object): Object`**
+  Первый аргумент опционально может быть строкой с указанным namespace. [Подробнее](modules.md#binding-helpers-with-namespace)
+
+- **`mapActions(namespace?: string, map: Array<string> | Object): Object`**
 
   Создаёт проксирующие методы компонента, позволяющие диспетчеризировать действия. [Подробнее](actions.md#dispatching-actions-in-components)
 
-- **`mapMutations(map: Array<string> | Object): Object`**
+  Первый аргумент опционально может быть строкой с указанным namespace. [Подробнее](modules.md#binding-helpers-with-namespace)
+
+- **`mapMutations(namespace?: string, map: Array<string> | Object): Object`**
 
   Создаёт проксирующие методы компонента, позволяющие инициировать мутации. [Подробнее](mutations.md#commiting-mutations-in-components)
+
+  Первый аргумент опционально может быть строкой с указанным namespace. [Подробнее](modules.md#binding-helpers-with-namespace)

+ 3 - 3
docs/ru/book.json

@@ -1,10 +1,10 @@
 {
-  "gitbook": "2.x.x",
-  "plugins": ["edit-link", "prism", "-highlight", "github"],
+  "gitbook": ">3.0.0",
+  "plugins": ["edit-link", "prism", "theme-vuejs@git+https://github.com/pearofducks/gitbook-plugin-theme-vuejs.git", "-fontsettings", "-highlight", "github"],
   "pluginsConfig": {
     "edit-link": {
       "base": "https://github.com/vuejs/vuex/tree/dev/docs",
-      "label": "Редактировать Эту Страницу"
+      "label": "Редактировать эту страницу"
     },
     "github": {
       "url": "https://github.com/vuejs/vuex/"

+ 1 - 1
docs/ru/getting-started.md

@@ -35,7 +35,7 @@ store.commit('increment')
 console.log(store.state.count) // -> 1
 ```
 
-Ещё раз заметим: мы вызываем мутацию вместо того чтобы напрямую изменить `store.state.count` потому что мы хотим явным образом отслеживать изменения. Это простое архитектурное соглашение делает наши намерения более очевидными и упрощает понимание для читателя кода того, как измененяется состояние приложения. Кроме того, этот подход позволяет реализовать инструменты для логирования каждой мутации, создания моментальных слепков состояния приложения и даже применения "машины времени" при отладке.
+Ещё раз заметим: мы вызываем мутацию, вместо того чтобы напрямую изменить `store.state.count`, потому что мы хотим явным образом отслеживать изменения. Это простое архитектурное соглашение делает намерения более очевидными и упрощает понимание изменений состояния приложения при чтении кода. Кроме того, этот подход позволяет реализовать инструменты для логирования каждой мутации, создания моментальных слепков состояния приложения и даже применения "машины времени" при отладке.
 
 Поскольку хранилище реактивно, для использования его состояния в компонентах достаточно просто создать вычисляемые свойства. Изменения состояния можно вызывать, инициализируя мутации в методах компонентов.
 

二进制
docs/ru/images/flow.png


二进制
docs/ru/images/vuex.png


+ 127 - 26
docs/ru/modules.md

@@ -81,42 +81,143 @@ const moduleA = {
 
 ### Пространства имён
 
-Обратите внимание, что действия, мутации и геттеры, определённые внутри модулей, тем не менее регистрируются в **глобальном пространстве имён** — это позволяет нескольким модулям реагировать на один и тот же тип мутации или действия. Избежать конфликта пространства имён вы можете, указывая для них префикс или суффикс. При создании пригодных для повторного использования модулей Vuex, пожалуй, так поступать даже нужно — кто знает, в каком окружении их будут использовать? Например, предположим что мы создаём модуль `todos`:
+По умолчанию действия, мутации и геттеры внутри модулей регистрируются в **глобальном пространстве имён** — это позволяет нескольким модулям реагировать на тот же тип мутаций/действий.
+
+Если вы хотите сделать модули более самодостаточными и готовыми для переиспользования, вы можете создать его с собственным пространством имён, указав опцию `namespaced: true`. Когда модуль будет зарегистрирован, все его геттеры, действия и мутации будут автоматически связаны с этим пространством имён, основываясь на пути по которому зарегистрирован модуль. Например:
 
 ``` js
-// types.js
+const store = new Vuex.Store({
+  modules: {
+    account: {
+      namespaced: true,
+
+      // содержимое модуля
+      state: { ... }, // состояние модуля автоматически вложено и не зависит от опции пространства имён
+      getters: {
+        isAdmin () { ... } // -> getters['account/isAdmin']
+      },
+      actions: {
+        login () { ... } // -> dispatch('account/login')
+      },
+      mutations: {
+        login () { ... } // -> commit('account/login')
+      },
+
+      // вложенные модули
+      modules: {
+        // наследует пространство имён из родительского модуля
+        myPage: {
+          state: { ... },
+          getters: {
+            profile () { ... } // -> getters['account/profile']
+          }
+        },
+
+        // большая вложенность с собственным пространством имён
+        posts: {
+          namespaced: true,
+
+          state: { ... },
+          getters: {
+            popular () { ... } // -> getters['account/posts/popular']
+          }
+        }
+      }
+    }
+  }
+})
+```
+
+Геттеры и действия с собственным пространством имён будут получать свои локальные `getters`, `dispatch` и `commit`. Другими словами, вы можете использовать содержимое модуля без написания префиксов в том же модуле. Переключения между пространствами имён не влияет на код внутри модуля.
 
-// определим названия геттеров, действий и мутаций как константы
-// используя название модуля (`todos`) в качестве префикса
-export const DONE_COUNT = 'todos/DONE_COUNT'
-export const FETCH_ALL = 'todos/FETCH_ALL'
-export const TOGGLE_DONE = 'todos/TOGGLE_DONE'
+#### Доступ к глобальному содержимому в модулях с своим пространством имён
+
+Если вы хотите использовать глобальное состояние и геттеры, `rootState` и `rootGetters` передаются 3-м и 4-м аргументами в функции геттеров, а также как свойства в объекте `context`, передаваемом в функции действий.
+
+Для запуска действий или совершении мутаций в глобальном пространстве имён нужно добавить `{ root: true }` 3-м аргументом в `dispatch` и `commit`.
+
+``` js
+modules: {
+  foo: {
+    namespaced: true,
+
+    getters: {
+      // `getters` ограничены геттерами данного модуля
+      // вы можете использовать rootGetters из 4-го аргумента геттеров
+      someGetter (state, getters, rootState, rootGetters) {
+        getters.someOtherGetter // -> 'foo/someOtherGetter'
+        rootGetters.someOtherGetter // -> 'someOtherGetter'
+      },
+      someOtherGetter: state => { ... }
+    },
+
+    actions: {
+      // dispatch и commit также ограничены данным модулем
+      // они принимают опцию `root` для вызова в глобальном пространстве имён
+      someAction ({ dispatch, commit, getters, rootGetters }) {
+        getters.someGetter // -> 'foo/someGetter'
+        rootGetters.someGetter // -> 'someGetter'
+
+        dispatch('someOtherAction') // -> 'foo/someOtherAction'
+        dispatch('someOtherAction', null, { root: true }) // -> 'someOtherAction'
+
+        commit('someMutation') // -> 'foo/someMutation'
+        commit('someMutation', null, { root: true }) // -> 'someMutation'
+      },
+      someOtherAction (ctx, payload) { ... }
+    }
+  }
+}
 ```
 
+#### Подключение с помощью вспомогательных функций к пространству имён
+
+Подключение модуля со своим пространством имён к компонентам с помощью вспомогательных функций `mapState`, `mapGetters`, `mapActions` и `mapMutations` это может выглядеть подобным образом:
+
 ``` js
-// modules/todos.js
-import * as types from '../types'
+computed: {
+  ...mapState({
+    a: state => state.some.nested.module.a,
+    b: state => state.some.nested.module.b
+  })
+},
+methods: {
+  ...mapActions([
+    'some/nested/module/foo',
+    'some/nested/module/bar'
+  ])
+}
+```
 
-// теперь используем определённые выше константы
-const todosModule = {
-  state: { todos: [] },
+В таких случаях вы можете передать строку с пространством имён в качестве первого аргумента к вспомогательным функциям, тогда все привязки будут выполнены в контексте этого модуля. Пример выше можно упростить до:
 
-  getters: {
-    [types.DONE_COUNT] (state) {
-      // ...
-    }
-  },
+``` js
+computed: {
+  ...mapState('some/nested/module', {
+    a: state => state.a,
+    b: state => state.b
+  })
+},
+methods: {
+  ...mapActions('some/nested/module', [
+    'foo',
+    'bar'
+  ])
+}
+```
 
-  actions: {
-    [types.FETCH_ALL] (context, payload) {
-      // ...
-    }
-  },
+#### Уточнение для разработчиков плагинов
 
-  mutations: {
-    [types.TOGGLE_DONE] (state, payload) {
-      // ...
-    }
+Вас может обеспокоить непредсказуемость пространства имён для ваших модулей, когда вы создаёте [плагин](plugins.md) с собственными модулями и возможностью пользователям добавлять их в хранилище Vuex. Ваши модули будут также помещены в пространство имён, если пользователи плагина добавляют ваши модули в модуль со своим пространством имён. Чтобы приспособиться к этой ситуации, вам может потребоваться получить значение пространства имён через настройки плагина:
+
+``` js
+// получение значения пространства имён через options
+// и возвращение функции плагина Vuex
+export function createPlugin (options = {}) {
+  return function (store) {
+    // добавление пространства имён к модулям плагина
+    const namespace = options.namespace || ''
+    store.dispatch(namespace + 'pluginAction')
   }
 }
 ```

+ 1 - 1
docs/ru/structure.md

@@ -29,4 +29,4 @@
         └── products.js   # модуль товаров
 ```
 
-Для справки можено использовать [Пример корзины покупок](https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart).
+Для справки можно использовать [Пример корзины покупок](https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart).