Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加中文 Increase in Chinese #3049

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/components/Footer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function Footer() {
<FormattedMessage
{...messages.authorMessage}
values={{
author: <A href="https://twitter.com/mxstbr">Max Stoiber</A>,
author: <A target="_blank" href="https://twitter.com/mxstbr">Max Stoiber</A>,
}}
/>
</section>
Expand Down
41 changes: 23 additions & 18 deletions app/i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,48 @@
*/
const addLocaleData = require('react-intl').addLocaleData; //eslint-disable-line
const enLocaleData = require('react-intl/locale-data/en');
const zhLocaleData = require('react-intl/locale-data/zh');
const deLocaleData = require('react-intl/locale-data/de');

const enTranslationMessages = require('./translations/en.json');
const zhTranslationMessages = require('./translations/zh.json');
const deTranslationMessages = require('./translations/de.json');

addLocaleData(enLocaleData);
addLocaleData(zhLocaleData);
addLocaleData(deLocaleData);

const DEFAULT_LOCALE = 'en';
const DEFAULT_LOCALE = 'zh';

// prettier-ignore
const appLocales = [
'en',
'de',
'en',
'zh',
'de',
];

const formatTranslationMessages = (locale, messages) => {
const defaultFormattedMessages =
locale !== DEFAULT_LOCALE
? formatTranslationMessages(DEFAULT_LOCALE, enTranslationMessages)
: {};
const flattenFormattedMessages = (formattedMessages, key) => {
const formattedMessage =
!messages[key] && locale !== DEFAULT_LOCALE
? defaultFormattedMessages[key]
: messages[key];
return Object.assign(formattedMessages, { [key]: formattedMessage });
};
return Object.keys(messages).reduce(flattenFormattedMessages, {});
const defaultFormattedMessages =
locale !== DEFAULT_LOCALE ?
formatTranslationMessages(DEFAULT_LOCALE, enTranslationMessages) : {};
const flattenFormattedMessages = (formattedMessages, key) => {
const formattedMessage = !messages[key] && locale !== DEFAULT_LOCALE ?
defaultFormattedMessages[key] :
messages[key];
return Object.assign(formattedMessages, {
[key]: formattedMessage
});
};
return Object.keys(messages).reduce(flattenFormattedMessages, {});
};

const translationMessages = {
en: formatTranslationMessages('en', enTranslationMessages),
de: formatTranslationMessages('de', deTranslationMessages),
en: formatTranslationMessages('en', enTranslationMessages),
zh: formatTranslationMessages('zh', zhTranslationMessages),
de: formatTranslationMessages('de', deTranslationMessages),
};

exports.appLocales = appLocales;
exports.formatTranslationMessages = formatTranslationMessages;
exports.translationMessages = translationMessages;
exports.DEFAULT_LOCALE = DEFAULT_LOCALE;
exports.DEFAULT_LOCALE = DEFAULT_LOCALE;
61 changes: 31 additions & 30 deletions app/translations/de.json
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
{
"boilerplate.components.Footer.author.message": "Mit Liebe gemacht von {author}.",
"boilerplate.components.Footer.license.message": "Dieses Projekt wird unter der MIT-Lizenz veröffentlicht.",
"boilerplate.components.Header.features": "",
"boilerplate.components.Header.home": "",
"boilerplate.containers.FeaturePage.css.header": "",
"boilerplate.containers.FeaturePage.css.message": "Die nächste Generation von CSS",
"boilerplate.containers.FeaturePage.feedback.header": "Sofortiges Feedback",
"boilerplate.containers.FeaturePage.feedback.message": "Genießen Sie die beste Entwicklungserfahrung und programmieren Sie Ihre App so schnell wie noch nie! Ihre Änderungen an dem CSS und JavaScript sind sofort reflektiert, ohne die Seite aktualisieren zu müssen. So bleibt der Anwendungszustand bestehen, auch wenn Sie etwas in dem darunter liegenden Code aktualisieren!",
"boilerplate.containers.FeaturePage.header": "",
"boilerplate.containers.FeaturePage.internationalization.header": "Komplette i18n Standard-Internationalisierung und Pluralisierung",
"boilerplate.containers.FeaturePage.internationalization.message": "Das Internet ist global. Mehrsprachige- und Pluralisierungsunterstützung ist entscheidend für große Web-Anwendungen.",
"boilerplate.containers.FeaturePage.javascript.header": "Das Internet ist global. Mehrsprachige- und Pluralisierungsunterstützung ist entscheidend für große Web-Anwendungen.",
"boilerplate.containers.FeaturePage.javascript.message": "Benutzen Sie ES6 template strings, object destructuring, arrow functions, JSX syntax und mehr, heute.",
"boilerplate.containers.FeaturePage.network.header": "",
"boilerplate.containers.FeaturePage.network.message": "The next frontier in performant web apps: availability without a\n network connection from the instant your users load the app.",
"boilerplate.containers.FeaturePage.routing.header": "Standard Routing",
"boilerplate.containers.FeaturePage.routing.message": "Schreiben Sie CSS, das am selben Ort wie ihre Komponenten ist. Deterministisch generierte, einzigartige Klassennamen halten die Spezifität niedrig während styling Konflikte vermieden werden. Senden Sie nur das CSS an ihre Benutzer welches dann wirklich sichtbar ist für die schnellste Performance!",
"boilerplate.containers.FeaturePage.scaffolding.header": "Schnelles Scaffolding",
"boilerplate.containers.FeaturePage.scaffolding.message": "Automatisieren Sie die Kreation von Komponenten, Containern, Routen, Selektoren und Sagas – und ihre Tests – direkt von dem Terminal!",
"boilerplate.containers.FeaturePage.state_management.header": "Berechenbare Stateverwaltung",
"boilerplate.containers.FeaturePage.state_management.message": "Unidirectional data flow erlaubt uns alle Änderungen ihrer Applikation zu loggen und time travel debugging einzusetzen.",
"boilerplate.containers.HomePage.start_project.header": "Beginnen Sie Ihr nächstes React Projekt in Sekunden",
"boilerplate.containers.HomePage.start_project.message": "Ein skalierendes, offline-first Fundament mit der besten DX und einem Fokus auf Performance und bewährte Methoden",
"boilerplate.containers.HomePage.tryme.atPrefix": "",
"boilerplate.containers.HomePage.tryme.header": "Probiere mich!",
"boilerplate.containers.HomePage.tryme.message": "Zeige die Github Repositories von",
"boilerplate.containers.LocaleToggle.de": "",
"boilerplate.containers.LocaleToggle.en": "",
"boilerplate.containers.NotFoundPage.header": "Seite nicht gefunden."
}
"boilerplate.components.Footer.author.message": "Mit Liebe gemacht von {author}.",
"boilerplate.components.Footer.license.message": "Dieses Projekt wird unter der MIT-Lizenz veröffentlicht.",
"boilerplate.components.Header.features": "",
"boilerplate.components.Header.home": "",
"boilerplate.containers.FeaturePage.css.header": "",
"boilerplate.containers.FeaturePage.css.message": "Die nächste Generation von CSS",
"boilerplate.containers.FeaturePage.feedback.header": "Sofortiges Feedback",
"boilerplate.containers.FeaturePage.feedback.message": "Genießen Sie die beste Entwicklungserfahrung und programmieren Sie Ihre App so schnell wie noch nie! Ihre Änderungen an dem CSS und JavaScript sind sofort reflektiert, ohne die Seite aktualisieren zu müssen. So bleibt der Anwendungszustand bestehen, auch wenn Sie etwas in dem darunter liegenden Code aktualisieren!",
"boilerplate.containers.FeaturePage.header": "",
"boilerplate.containers.FeaturePage.internationalization.header": "Komplette i18n Standard-Internationalisierung und Pluralisierung",
"boilerplate.containers.FeaturePage.internationalization.message": "Das Internet ist global. Mehrsprachige- und Pluralisierungsunterstützung ist entscheidend für große Web-Anwendungen.",
"boilerplate.containers.FeaturePage.javascript.header": "Das Internet ist global. Mehrsprachige- und Pluralisierungsunterstützung ist entscheidend für große Web-Anwendungen.",
"boilerplate.containers.FeaturePage.javascript.message": "Benutzen Sie ES6 template strings, object destructuring, arrow functions, JSX syntax und mehr, heute.",
"boilerplate.containers.FeaturePage.network.header": "",
"boilerplate.containers.FeaturePage.network.message": "The next frontier in performant web apps: availability without a\n network connection from the instant your users load the app.",
"boilerplate.containers.FeaturePage.routing.header": "Standard Routing",
"boilerplate.containers.FeaturePage.routing.message": "Schreiben Sie CSS, das am selben Ort wie ihre Komponenten ist. Deterministisch generierte, einzigartige Klassennamen halten die Spezifität niedrig während styling Konflikte vermieden werden. Senden Sie nur das CSS an ihre Benutzer welches dann wirklich sichtbar ist für die schnellste Performance!",
"boilerplate.containers.FeaturePage.scaffolding.header": "Schnelles Scaffolding",
"boilerplate.containers.FeaturePage.scaffolding.message": "Automatisieren Sie die Kreation von Komponenten, Containern, Routen, Selektoren und Sagas – und ihre Tests – direkt von dem Terminal!",
"boilerplate.containers.FeaturePage.state_management.header": "Berechenbare Stateverwaltung",
"boilerplate.containers.FeaturePage.state_management.message": "Unidirectional data flow erlaubt uns alle Änderungen ihrer Applikation zu loggen und time travel debugging einzusetzen.",
"boilerplate.containers.HomePage.start_project.header": "Beginnen Sie Ihr nächstes React Projekt in Sekunden",
"boilerplate.containers.HomePage.start_project.message": "Ein skalierendes, offline-first Fundament mit der besten DX und einem Fokus auf Performance und bewährte Methoden",
"boilerplate.containers.HomePage.tryme.atPrefix": "",
"boilerplate.containers.HomePage.tryme.header": "Probiere mich!",
"boilerplate.containers.HomePage.tryme.message": "Zeige die Github Repositories von",
"boilerplate.containers.LocaleToggle.de": "de",
"boilerplate.containers.LocaleToggle.en": "en",
"boilerplate.containers.LocaleToggle.zh": "zh",
"boilerplate.containers.NotFoundPage.header": "Seite nicht gefunden."
}
61 changes: 31 additions & 30 deletions app/translations/en.json
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
{
"boilerplate.components.Footer.author.message": "Made with love by {author}.",
"boilerplate.components.Footer.license.message": "This project is licensed under the MIT license.",
"boilerplate.components.Header.features": "Features",
"boilerplate.components.Header.home": "Home",
"boilerplate.containers.FeaturePage.css.header": "Features",
"boilerplate.containers.FeaturePage.css.message": "Next generation CSS",
"boilerplate.containers.FeaturePage.feedback.header": "Instant feedback",
"boilerplate.containers.FeaturePage.feedback.message": "Enjoy the best DX and code your app at the speed of thought! Your\n saved changes to the CSS and JS are reflected instantaneously\n without refreshing the page. Preserve application state even when\n you update something in the underlying code!",
"boilerplate.containers.FeaturePage.header": "Features",
"boilerplate.containers.FeaturePage.internationalization.header": "Complete i18n Standard Internationalization & Pluralization",
"boilerplate.containers.FeaturePage.internationalization.message": "Scalable apps need to support multiple languages, easily add and support multiple languages with `react-intl`.",
"boilerplate.containers.FeaturePage.javascript.header": "Next generation JavaScript",
"boilerplate.containers.FeaturePage.javascript.message": "Use template strings, object destructuring, arrow functions, JSX\n syntax and more, today.",
"boilerplate.containers.FeaturePage.network.header": "Offline-first",
"boilerplate.containers.FeaturePage.network.message": "The next frontier in performant web apps: availability without a\n network connection from the instant your users load the app.",
"boilerplate.containers.FeaturePage.routing.header": "Industry-standard routing",
"boilerplate.containers.FeaturePage.routing.message": "Write composable CSS that's co-located with your components for\n complete modularity. Unique generated class names keep the\n specificity low while eliminating style clashes. Ship only the\n styles that are on the page for the best performance.",
"boilerplate.containers.FeaturePage.scaffolding.header": "Quick scaffolding",
"boilerplate.containers.FeaturePage.scaffolding.message": "Automate the creation of components, containers, routes, selectors\n and sagas - and their tests - right from the CLI!",
"boilerplate.containers.FeaturePage.state_management.header": "Predictable state management",
"boilerplate.containers.FeaturePage.state_management.message": "Unidirectional data flow allows for change logging and time travel\n debugging.",
"boilerplate.containers.HomePage.start_project.header": "Start your next react project in seconds",
"boilerplate.containers.HomePage.start_project.message": "A highly scalable, offline-first foundation with the best DX and a focus on performance and best practices",
"boilerplate.containers.HomePage.tryme.atPrefix": "@",
"boilerplate.containers.HomePage.tryme.header": "Try me!",
"boilerplate.containers.HomePage.tryme.message": "Show Github repositories by",
"boilerplate.containers.LocaleToggle.de": "de",
"boilerplate.containers.LocaleToggle.en": "en",
"boilerplate.containers.NotFoundPage.header": "Page not found."
}
"boilerplate.components.Footer.author.message": "Made with love by {author}.",
"boilerplate.components.Footer.license.message": "This project is licensed under the MIT license.",
"boilerplate.components.Header.features": "Features",
"boilerplate.components.Header.home": "Home",
"boilerplate.containers.FeaturePage.css.header": "Features",
"boilerplate.containers.FeaturePage.css.message": "Next generation CSS",
"boilerplate.containers.FeaturePage.feedback.header": "Instant feedback",
"boilerplate.containers.FeaturePage.feedback.message": "Enjoy the best DX and code your app at the speed of thought! Your\n saved changes to the CSS and JS are reflected instantaneously\n without refreshing the page. Preserve application state even when\n you update something in the underlying code!",
"boilerplate.containers.FeaturePage.header": "Features",
"boilerplate.containers.FeaturePage.internationalization.header": "Complete i18n Standard Internationalization & Pluralization",
"boilerplate.containers.FeaturePage.internationalization.message": "Scalable apps need to support multiple languages, easily add and support multiple languages with `react-intl`.",
"boilerplate.containers.FeaturePage.javascript.header": "Next generation JavaScript",
"boilerplate.containers.FeaturePage.javascript.message": "Use template strings, object destructuring, arrow functions, JSX\n syntax and more, today.",
"boilerplate.containers.FeaturePage.network.header": "Offline-first",
"boilerplate.containers.FeaturePage.network.message": "The next frontier in performant web apps: availability without a\n network connection from the instant your users load the app.",
"boilerplate.containers.FeaturePage.routing.header": "Industry-standard routing",
"boilerplate.containers.FeaturePage.routing.message": "Write composable CSS that's co-located with your components for\n complete modularity. Unique generated class names keep the\n specificity low while eliminating style clashes. Ship only the\n styles that are on the page for the best performance.",
"boilerplate.containers.FeaturePage.scaffolding.header": "Quick scaffolding",
"boilerplate.containers.FeaturePage.scaffolding.message": "Automate the creation of components, containers, routes, selectors\n and sagas - and their tests - right from the CLI!",
"boilerplate.containers.FeaturePage.state_management.header": "Predictable state management",
"boilerplate.containers.FeaturePage.state_management.message": "Unidirectional data flow allows for change logging and time travel\n debugging.",
"boilerplate.containers.HomePage.start_project.header": "Start your next react project in seconds",
"boilerplate.containers.HomePage.start_project.message": "A highly scalable, offline-first foundation with the best DX and a focus on performance and best practices",
"boilerplate.containers.HomePage.tryme.atPrefix": "@",
"boilerplate.containers.HomePage.tryme.header": "Try me!",
"boilerplate.containers.HomePage.tryme.message": "Show Github repositories by",
"boilerplate.containers.LocaleToggle.de": "de",
"boilerplate.containers.LocaleToggle.en": "en",
"boilerplate.containers.LocaleToggle.zh": "zh",
"boilerplate.containers.NotFoundPage.header": "Page not found."
}
32 changes: 32 additions & 0 deletions app/translations/zh.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"boilerplate.components.Footer.author.message": "{author} 用爱制造。",
"boilerplate.components.Footer.license.message": "该项目在 MIT 许可下获得许可。",
"boilerplate.components.Header.features": "产品特点",
"boilerplate.components.Header.home": "主页",
"boilerplate.containers.FeaturePage.css.header": "产品特点",
"boilerplate.containers.FeaturePage.css.message": "下一代 CSS",
"boilerplate.containers.FeaturePage.feedback.header": "即时反馈",
"boilerplate.containers.FeaturePage.feedback.message": "享受最好的 DX 并以思考的速度编写您的应用程序! 您保存的 CSS 和 JS 更改会立即反映,无需刷新页面。 即使您更新底层代码中的某些内容,也可以保留应用程序状态!",
"boilerplate.containers.FeaturePage.header": "产品特点",
"boilerplate.containers.FeaturePage.internationalization.header": "完成 i18n 标准国际化和多元化",
"boilerplate.containers.FeaturePage.internationalization.message": "可扩展的应用程序需要支持多种语言,使用 `react-intl` 轻松添加和支持多种语言。",
"boilerplate.containers.FeaturePage.javascript.header": "下一代 JavaScript",
"boilerplate.containers.FeaturePage.javascript.message": "立即使用模板字符串、对象解构、箭头函数、JSX 语法等。",
"boilerplate.containers.FeaturePage.network.header": "离线优先",
"boilerplate.containers.FeaturePage.network.message": "高性能 Web 应用程序的下一个前沿:从用户加载应用程序的那一刻起,无需网络连接即可使用。",
"boilerplate.containers.FeaturePage.routing.header": "行业标准路由",
"boilerplate.containers.FeaturePage.routing.message": "编写与您的组件位于同一位置的可组合 CSS,以实现完整的模块化。 唯一生成的类名在消除样式冲突的同时保持\n 低特异性。 只发送页面上的\n 样式以获得最佳性能。",
"boilerplate.containers.FeaturePage.scaffolding.header": "快速脚手架",
"boilerplate.containers.FeaturePage.scaffolding.message": "直接从 CLI 自动创建组件、容器、路由、选择器和sagas - 及其测试!",
"boilerplate.containers.FeaturePage.state_management.header": "可预测的状态管理",
"boilerplate.containers.FeaturePage.state_management.message": "单向数据流允许更改记录和时间旅行调试。",
"boilerplate.containers.HomePage.start_project.header": "在几秒钟内开始你的下一个反应项目",
"boilerplate.containers.HomePage.start_project.message": "一个高度可伸缩、离线优先的基础,拥有最好的DX,并专注于性能和最佳实践",
"boilerplate.containers.HomePage.tryme.atPrefix": "@",
"boilerplate.containers.HomePage.tryme.header": "联系我",
"boilerplate.containers.HomePage.tryme.message": "显示Github存储库",
"boilerplate.containers.LocaleToggle.de": "de",
"boilerplate.containers.LocaleToggle.en": "en",
"boilerplate.containers.LocaleToggle.zh": "zh",
"boilerplate.containers.NotFoundPage.header": "页面未找到"
}