image.png

    1. navigator.languages
    2. "af", "sq", "ar-SA", "ar-IQ", "ar-EG", "ar-LY", "ar-DZ", "ar-MA", "ar-TN", "ar-OM",
    3. "ar-YE", "ar-SY", "ar-JO", "ar-LB", "ar-KW", "ar-AE", "ar-BH", "ar-QA", "eu", "bg",
    4. "be", "ca", "zh-TW", "zh-CN", "zh-HK", "zh-SG", "hr", "cs", "da", "nl", "nl-BE", "en",
    5. "en-US", "en-EG", "en-AU", "en-GB", "en-CA", "en-NZ", "en-IE", "en-ZA", "en-JM",
    6. "en-BZ", "en-TT", "et", "fo", "fa", "fi", "fr", "fr-BE", "fr-CA", "fr-CH", "fr-LU",
    7. "gd", "gd-IE", "de", "de-CH", "de-AT", "de-LU", "de-LI", "el", "he", "hi", "hu",
    8. "is", "id", "it", "it-CH", "ja", "ko", "lv", "lt", "mk", "mt", "no", "pl",
    9. "pt-BR", "pt", "rm", "ro", "ro-MO", "ru", "ru-MI", "sz", "sr", "sk", "sl", "sb",
    10. "es", "es-AR", "es-GT", "es-CR", "es-PA", "es-DO", "es-MX", "es-VE", "es-CO",
    11. "es-PE", "es-EC", "es-CL", "es-UY", "es-PY", "es-BO", "es-SV", "es-HN", "es-NI",
    12. "es-PR", "sx", "sv", "sv-FI", "th", "ts", "tn", "tr", "uk", "ur", "ve", "vi", "xh",
    13. "ji", "zu"]
    14. FormattedMessage组件中的信息parser后显示以<span>包裹的文本;
    15. *可以通过tagName指定其它标签包裹;
    16. *以id属性的值"hello"为索引——索引到自定义的映射表'./locale/zh_CN'中去;
    17. *messages['hello']——messages为父组件IntlProviderpropsmessages属性;
    18. *若没有上述的返回值,则显示defaultMessage的值"React Intl Translations Example";
    19. *FormattedMessage添加子元素或ReactElement
    20. * <FormattedMessage id="hello">
    21. * {(formattedValue)=>(
    22. * <em>{formattedValue}</em>
    23. * )}
    24. * </FormattedMessage>
    25. <FormattedMessage
    26. id="hello"
    27. defaultMessage="React Intl Translations Example"
    28. />
    29. <FormattedMessage id="hello">
    30. {(formattedValue)=>(
    31. <em>{formattedValue}</em>
    32. )}
    33. </FormattedMessage>
    34. <FormattedMessage
    35. tagName = 'p'
    36. id='superHello'
    37. defaultMessage="Locales:北京"
    38. values={{
    39. someone:'zxdobest'
    40. }}
    41. />
    42. 输出HTML块结构;
    43. import React from 'react';
    44. import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
    45. const ChildComponent = ({ intl }) => {
    46. //传入的{intl}名称不可更改;
    47. console.log(React.PropTypes)
    48. const getMessage = intl.messages;
    49. return(
    50. <section>
    51. {/*
    52. *通过intl.messages获取映射属性的方法;
    53. * 可以和任意内容(如:HTML标签)组合;
    54. * */}
    55. <a>{getMessage.hello}</a>
    56. {/*通过FormattedMessage格式化,可以传入参数{values}*/}
    57. <FormattedMessage
    58. tagName = 'p'
    59. id='superHello'
    60. defaultMessage="Locales:北京"
    61. values={{
    62. someone:'zxdobest'
    63. }}
    64. />
    65. {/*
    66. *这种结构,类同于intl.messages.superHello可以和其它内容任意组合;
    67. *能且仅能获取superHello的映射;
    68. * 目前尚未找到如果在第一种方法中传入values;
    69. */}
    70. <FormattedMessage id="superHello" values={{
    71. someone:'mihuartuanr'
    72. }}>
    73. {(formattedValue)=>(
    74. <p>{formattedValue}</p>
    75. )}
    76. </FormattedMessage>
    77. </section>
    78. );
    79. }
    80. ChildComponent.propTypes = {
    81. intl: intlShape.isRequired
    82. }
    83. export default injectIntl(ChildComponent);
    84. react-intl@2.9.0
    85. https://github.com/formatjs/babel-plugin-react-intl
    86. babel-plugin-formatjs
    87. npm i babel-plugin-react-intl@2.9.0 -D
    88. Extracts string messages for translation from modules that use React Intl.
    89. 我使用babel-plugin-react-intl来自动提取我的React应用程序中的所有标签。我认为以下两点主要优势:
    90. 使用插件,我的应用程序中的所有标签都会自动提取到json文件。而不必手动更新将被翻译的json文件。这样,我就不用担心这个文件了,因为插件会将标签贴到它上面。
    91. 如果我不小心为标签创建了一个重复的ID,插件告诉我通过在webpack上抛出一个错误
    92. 一旦完成了所有这些消息的翻译,你只需要使用babel-plugin react-intl插件来构建webpack。这将从代码库中提取所有定义的消息到JSON文件中。这些文件然后发送给你的翻译人员,他们翻译所有这些消息,并将翻译放入一个平坦的JSON哈希中,然后将其加载到你的代码中,并且您有一个支持i18n的应用程序。

    chrome设置:高级设置-语言和输入设置