[PR#884] feat(l10n): upgrade `i18next-scanner` and refresh translations

未分类 bolang 6个月前 (10-14) 53次浏览

Issue #884 | 状态: 已关闭 | 作者: cheton | 创建时间: 2024-10-15

标签: Enhancement Review effort [1-5]: 2 other


PR Type

enhancement, other

_

Description

– Upgraded i18next-scanner dependency to version 4.6.0.
– Updated removeUnusedKeys from a boolean to a function in both i18next-scanner app and server configurations.
– Added and improved translations for multiple languages, enhancing localization support and consistency.
– Completed translations for user interface elements and system messages in several languages.

_

Changes walkthrough 📝

Relevant files
Configuration changes
2 files

i18next-scanner.app.config.js

Update removeUnusedKeys to a function in config.             

i18next-scanner.app.config.js

  • Changed removeUnusedKeys from a boolean to a function.
  • Added comments explaining the parameters and return value of the
    function.
  • Function now removes unused keys only if the namespace is ‘resource’.

  • +11/-1   
    i18next-scanner.server.config.js

    Update removeUnusedKeys to a function in server config.

    i18next-scanner.server.config.js

  • Changed removeUnusedKeys from a boolean to a function.
  • Added comments explaining the parameters and return value of the
    function.
  • Function now removes unused keys only if the namespace is ‘resource’.

  • +11/-1   
    Localization
    5 files

    resource.json

    Add and improve Russian translations.                                       

    src/app/i18n/ru/resource.json

  • Added translations for previously untranslated keys.
  • Improved existing translations for consistency.

  • +278/-275
    resource.json

    Add and improve Czech translations.                                           

    src/app/i18n/cs/resource.json

  • Added translations for previously untranslated keys.
  • Improved existing translations for consistency.

  • +285/-282
    resource.json

    Add and improve Ukrainian translations.                                   

    src/app/i18n/uk/resource.json

  • Added translations for previously untranslated keys.
  • Improved existing translations for consistency.

  • +27/-24 
    resource.json

    Add and improve Portuguese (Portugal) translations.           

    src/app/i18n/pt-pt/resource.json

  • Added translations for previously untranslated keys.
  • Improved existing translations for consistency.

  • +26/-23 
    resource.json

    Add and improve Japanese translations.                                     

    src/app/i18n/ja/resource.json

  • Added translations for previously untranslated keys.
  • Improved existing translations for consistency.

  • +6/-3     
    Enhancement
    10 files

    resource.json

    Complete Italian Translations for UI and System Messages 

    src/app/i18n/it/resource.json

  • Added Italian translations for previously untranslated strings.
  • Completed translations for user interface elements and system
    messages.
  • Enhanced localization support by filling in missing translations.

  • +333/-330
    resource.json

    Complete French Translations for UI and System Messages   

    src/app/i18n/fr/resource.json

  • Added French translations for previously untranslated strings.
  • Completed translations for user interface elements and system
    messages.
  • Enhanced localization support by filling in missing translations.

  • +277/-274
    resource.json

    Complete Turkish Translations for UI and System Messages 

    src/app/i18n/tr/resource.json

  • Added Turkish translations for previously untranslated strings.
  • Completed translations for user interface elements and system
    messages.
  • Enhanced localization support by filling in missing translations.

  • +71/-68 
    resource.json

    Complete Dutch Translations for UI and System Messages     

    src/app/i18n/nl/resource.json

  • Added Dutch translations for previously untranslated strings.
  • Completed translations for user interface elements and system
    messages.
  • Enhanced localization support by filling in missing translations.

  • +9/-6     
    resource.json

    Complete Norwegian Translations for UI and System Messages

    src/app/i18n/nb/resource.json

  • Added Norwegian translations for previously untranslated strings.
  • Completed translations for user interface elements and system
    messages.
  • Enhanced localization support by filling in missing translations.

  • +6/-3     
    resource.json

    Add English Strings for Data Collection and Language Settings

    src/app/i18n/en/resource.json

  • Added new English strings for data collection and display language
    settings.
  • Enhanced localization support by adding new configuration options.

  • +4/-1     
    resource.json

    Add missing Traditional Chinese translations for UI elements.

    src/app/i18n/zh-tw/resource.json

  • Added translations for previously untranslated strings in Traditional
    Chinese.
  • Completed missing translations for various UI elements and system
    messages.
  • Enhanced localization coverage for CNC machine operations and
    settings.

  • +167/-164
    resource.json

    Add missing Hungarian translations for UI elements.           

    src/app/i18n/hu/resource.json

  • Added translations for previously untranslated strings in Hungarian.
  • Completed missing translations for various UI elements and system
    messages.
  • Improved localization coverage for CNC machine operations and
    settings.

  • +160/-157
    resource.json

    Add missing Spanish translations for UI elements.               

    src/app/i18n/es/resource.json

  • Added translations for previously untranslated strings in Spanish.
  • Completed missing translations for various UI elements and system
    messages.
  • Enhanced localization coverage for CNC machine operations and
    settings.

  • +177/-174
    resource.json

    Add missing Brazilian Portuguese translations for UI elements.

    src/app/i18n/pt-br/resource.json

  • Added translations for previously untranslated strings in Brazilian
    Portuguese.
  • Completed missing translations for various UI elements and system
    messages.
  • Improved localization coverage for CNC machine operations and
    settings.

  • +31/-28 
    Dependencies
    1 files

    package.json

    Upgrade i18next-scanner dependency to version 4.6.0.     

    package.json

    – Updated i18next-scanner dependency from version 4.5.0 to 4.6.0.

    +1/-1     
    Additional files (token-limit)
    2 files

    resource.json

    ...                                                                                                           

    src/app/i18n/de/resource.json

    +91/-88 
    resource.json

    ...                                                                                                           

    src/app/i18n/zh-cn/resource.json

    +46/-43 

    _

    > 💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information


    评论 (7)

    #1 – codesandbox[bot] 于 2024-10-15

    #### Review or Edit in CodeSandbox

    Open the branch in source=ghapp”>VS Codesource=ghapp”>Preview


    #2 – codiumai-pr-agent-free[bot] 于 2024-10-15

    PR Reviewer Guide 🔍

    #### (Review updated until commit https://github.com/cncjs/cncjs/commit/b803289a790f46d641d284c4352d68628cf2c097)

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Configuration Change
    The removeUnusedKeys option has been changed from a boolean to a function. Verify that this change is intentional and does not break existing functionality.

    New File
    A new file has been added to define supported languages. Ensure that all required languages are included and correctly configured.

    Configuration Change
    Similar to the app config, the removeUnusedKeys option has been changed to a function. Verify consistency between app and server configurations.


    #3 – cheton 于 2024-10-16

    /improve


    #4 – cheton 于 2024-10-16

    /review


    #5 – cheton 于 2024-10-16

    /improve


    #6 – codiumai-pr-agent-free[bot] 于 2024-10-16

    PR Code Suggestions ✨

    Latest suggestions up to b803289

    Category Suggestion                                                                                                                                    Score
    Enhancement

    Refine the condition for removing unused translation keys to prevent accidental removal of necessary keys

    _

    Consider using a more specific condition in the removeUnusedKeys function. The
    current implementation removes all keys in the ‘resource’ namespace, which might be
    too broad. You could add more specific conditions to ensure only truly unused keys
    are removed.

    [i18next-scanner.app.config.js [23-28]](https://github.com/cncjs/cncjs/pull/884/files#diff-fe6e0f9fde69f4220cfe10008bb7f2d898baa987fbe2d406c455ff34ddbf99efR23-R28)

     removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    +  if (ns === 'resource' && !isKeyUsed(key)) {
         return true;
       }
       return false;
     },
    

    – [ ] Apply this suggestion

    Suggestion importance[1-10]: 7

    Why: The suggestion to refine the condition for removing unused keys by adding a check for key usage is valid and could prevent accidental removal of necessary keys. This enhances the functionality by ensuring only truly unused keys are removed, which is a meaningful improvement.

    7

    Maintainability

    ✅ Sort the supported languages array alphabetically for improved maintainability and readability

    _

    Suggestion Impact:

    The suggestion to sort the supported languages array alphabetically by the label property was implemented, but with an additional condition to prioritize certain languages.

    code diff:

    +].sort((a, b) => {
    +  const bottomHalfLanguages = new Set(['ja', 'zh-cn', 'zh-tw']);
    +
    +  const priorityA = bottomHalfLanguages.has(a.value) ? 1 : 0;
    +  const priorityB = bottomHalfLanguages.has(b.value) ? 1 : 0;
    +
    +  // If both items are in the priority list, keep their original order
    +  if (priorityA === priorityB) {
    +    return a.label.localeCompare(b.label);
    +  }
    +
    +  // If only one item is in the priority list, prioritize the other
    +  return priorityA - priorityB;
    

    _

    Consider sorting the SUPPORTED_LANGUAGES array alphabetically by the label property
    for easier maintenance and readability.

    [src/app/constants/i18n.js [1-18]](https://github.com/cncjs/cncjs/pull/884/files#diff-9286e66e8f57c2fa7079d1f78c4c15c55c54a5faf46ca568c3e735ff78a9bc8eR1-R18)

     export const SUPPORTED_LANGUAGES = [
       { value: 'de', label: 'Deutsch' },
       { value: 'en', label: 'English (US)' },
       { value: 'es', label: 'Español' },
       { value: 'fr', label: 'Français' },
    +  { value: 'hu', label: 'Magyar' },
       { value: 'it', label: 'Italiano' },
    -  { value: 'hu', label: 'Magyar' },
    +  { value: 'ja', label: '日本語' },
       { value: 'nb', label: 'Norwegian' },
       { value: 'nl', label: 'Nederlands' },
       { value: 'pt-br', label: 'Português (Brasil)' },
       { value: 'pt-pt', label: 'Português (Portugal)' },
       { value: 'ru', label: 'Русский' },
       { value: 'tr', label: 'Türkçe' },
       { value: 'uk', label: 'українська' },
    -  { value: 'ja', label: '日本語' },
       { value: 'zh-cn', label: '中文 (简体)' },
       { value: 'zh-tw', label: '中文 (繁體)' }
    -];
    +].sort((a, b) => a.label.localeCompare(b.label));
    

    – [ ] Apply this suggestion

    Suggestion importance[1-10]: 5

    Why: Sorting the supported languages array alphabetically by the label property can improve readability and maintainability. However, it is a minor enhancement that does not affect functionality, hence a moderate score is appropriate.

    5

    _

    #### Previous suggestions

    ✅ Suggestions up to commit 7570c86

    Category Suggestion                                                                                                                                    Score
    Best practice

    Extract duplicate function to a shared utility file to reduce code duplication

    _

    Consider extracting the removeUnusedKeys function to a shared utility file, as it’s
    identical in both ‘app’ and ‘server’ config files. This would improve
    maintainability and reduce code duplication.

    [i18next-scanner.server.config.js [15-20]](https://github.com/cncjs/cncjs/pull/884/files#diff-72f4f4b7950145642c6073cd04ae8bea2e34ff4582120fac4f8ab37857b68377R15-R20)

    -removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    -    return true;
    -  }
    -  return false;
    -},
    +removeUnusedKeys: require('./utils/removeUnusedKeys'),
    

    Suggestion importance[1-10]: 7

    Why: This suggestion is valid as it addresses code duplication by proposing to extract a common function into a utility file, which can improve maintainability and reduce redundancy.

    7

    Enhancement

    ✅ Use a configuration file for language options to improve maintainability

    _

    Suggestion Impact:

    The commit implemented the suggestion by replacing hardcoded language options with a map function that iterates over a constant array, SUPPORTED_LANGUAGES, to generate the options dynamically.

    code diff:

    +import { SUPPORTED_LANGUAGES } from 'app/constants/i18n';
     import i18n from 'app/lib/i18n';
     import styles from './index.styl';
     
    @@ -101,23 +102,9 @@
                       value={lang}
                       onChange={this.handlers.changeLanguage}
                     >
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    -                  
    +                  {SUPPORTED_LANGUAGES.map(({ value, label }) => (
    +                    
    +                  ))}
    

    _

    Consider using a separate configuration file or a constant array to store language
    options, making it easier to maintain and update the list of supported languages.

    [src/app/containers/Settings/General/General.jsx [105-121]](https://github.com/cncjs/cncjs/pull/884/files#diff-cdffdfa22b4d00e0a59dc36dbbdb9fe993b486dcdcea9d924854faa047edfc47R105-R121)

    +import { SUPPORTED_LANGUAGES } from '../../../constants/languages';
    +
    +...
    +
     
    
    Suggestion importance[1-10]: 6

    Why: The suggestion to use a configuration file for language options is reasonable, as it can enhance maintainability by centralizing the language data. However, it is not critical and offers a moderate improvement.

    6

    ✅ Suggestions up to commit b796f39

    Category Suggestion                                                                                                                                    Score
    Best practice

    ✅ Improve consistency in language naming conventions

    _

    Consider using a consistent naming convention for country/language codes.
    ‘Netherlands’ should be ‘Dutch’ to match the language name pattern used for other
    entries.

    [build.config.js [12]](https://github.com/cncjs/cncjs/pull/884/files#diff-ad214d6ab49228db3f19e72f9c741f7e6c63366a8f8000e1d83e2cb35f8d50c4R12-R12)

    -'nl', // Netherlands
    +'nl', // Dutch
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    Maintainability

    Extract repeated function to improve code reusability

    _

    Consider extracting the removeUnusedKeys function to a separate utility file to
    promote code reusability, as it’s used in multiple configuration files.

    [i18next-scanner.app.config.js [23-28]](https://github.com/cncjs/cncjs/pull/884/files#diff-fe6e0f9fde69f4220cfe10008bb7f2d898baa987fbe2d406c455ff34ddbf99efR23-R28)

    -removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    -    return true;
    -  }
    -  return false;
    -},
    +removeUnusedKeys: removeUnusedKeysUtil,
    

    Suggestion importance[1-10]: 7

    Why:

    7

    Enhancement

    ✅ Improve user experience by sorting language options alphabetically

    _

    Consider sorting the language options alphabetically by their display names to
    improve user experience when selecting a language.

    [src/app/containers/Settings/General/General.jsx [105-120]](https://github.com/cncjs/cncjs/pull/884/files#diff-cdffdfa22b4d00e0a59dc36dbbdb9fe993b486dcdcea9d924854faa047edfc47R105-R120)

     
     
     
     
    +
     
     
    -
     
     
     
     
     
     
     
     
     
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Suggestions up to commit 6c1ad91

    Category Suggestion                                                                                                                                    Score
    Enhancement

    Improve variable naming for better code readability

    _

    Consider using a more descriptive variable name instead of ‘ns’ for clarity. For
    example, ‘namespace’ would be more explicit.

    [i18next-scanner.app.config.js [23-28]](https://github.com/cncjs/cncjs/pull/884/files#diff-fe6e0f9fde69f4220cfe10008bb7f2d898baa987fbe2d406c455ff34ddbf99efR23-R28)

    -removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    +removeUnusedKeys: function(lng, namespace, key) {
    +  if (namespace === 'resource') {
         return true;
       }
       return false;
     },
    

    Suggestion importance[1-10]: 7

    Why:

    7

    Simplify function syntax for improved code conciseness

    _

    Consider using a more concise arrow function syntax for the removeUnusedKeys
    function.

    [i18next-scanner.server.config.js [15-20]](https://github.com/cncjs/cncjs/pull/884/files#diff-72f4f4b7950145642c6073cd04ae8bea2e34ff4582120fac4f8ab37857b68377R15-R20)

    -removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    -    return true;
    -  }
    -  return false;
    -},
    +removeUnusedKeys: (lng, ns, key) => ns === 'resource',
    

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Improve grammar in Spanish translations by using the correct form of “to be”

    _

    Consider using “Está” instead of “Esta” for better grammar in questions.

    [src/app/i18n/es/resource.json [63]](https://github.com/cncjs/cncjs/pull/884/files#diff-7bb82d1f047a31d3ca8900c381a868bf1b66d699219facf7611ff84714da82c0R63-R63)

    -"Are you sure you want to delete this item?": "Esta seguro de eliminar este ítem?",
    +"Are you sure you want to delete this item?": "¿Está seguro de eliminar este ítem?",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Correct spelling errors in translations to improve accuracy

    _

    Use “más” instead of “mas” for correct spelling and meaning.

    [src/app/i18n/es/resource.json [61]](https://github.com/cncjs/cncjs/pull/884/files#diff-7bb82d1f047a31d3ca8900c381a868bf1b66d699219facf7611ff84714da82c0R61-R61)

    -"and more...": "y mas...",
    +"and more...": "y más...",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Add missing diacritical marks in Spanish translations for proper spelling

    _

    Add missing accent mark to “ítem” for correct Spanish spelling.

    [src/app/i18n/es/resource.json [63]](https://github.com/cncjs/cncjs/pull/884/files#diff-7bb82d1f047a31d3ca8900c381a868bf1b66d699219facf7611ff84714da82c0R63-R63)

    -"Are you sure you want to delete this item?": "Esta seguro de eliminar este ítem?",
    +"Are you sure you want to delete this item?": "¿Está seguro de eliminar este ítem?",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Correct grammatical errors in Spanish translations to improve clarity

    _

    Use “ha” instead of “a” in the phrase “El servido a dejado de funcionar” for correct
    grammar.

    [src/app/i18n/es/resource.json [106]](https://github.com/cncjs/cncjs/pull/884/files#diff-7bb82d1f047a31d3ca8900c381a868bf1b66d699219facf7611ff84714da82c0R106-R106)

    -"Server has stopped working": "El servido a dejado de funcionar",
    +"Server has stopped working": "El servidor ha dejado de funcionar",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why:

    7

    Best practice

    Standardize JSON key formatting for consistency

    _

    Ensure consistent use of quotation marks for JSON keys. Some keys use single quotes
    while others use double quotes.

    [src/app/i18n/cs/resource.json [1-17]](https://github.com/cncjs/cncjs/pull/884/files#diff-0dfa07cc230b97dc955c0244e13bc19832235b5f3bb317e7c1d87c86e0f06b3dR1-R17)

    +"Records: {{from}} - {{to}} / {{total}}": "Rekordy: {{from}} - {{to}} / {{total}}",
    +"Records: {{total}}": "Rekordy: {{total}}",
    +"{{pageLength}} per page": "{{pageLength}} na stránku",
    +"New update available": "K dispozici nová aktualizace",
    +"Command succeeded": "Příkaz byl úspěšně proveden",
    +"Command failed ({{err}})": "Příkaz se nezdařil ({{err}})",
    +"My Account": "Můj účet",
    +"Signed in as {{name}}": "Přihlášen jako {{name}}",
    +"Account": "Účet",
    +"Sign Out": "Odhlásit se",
    +"Options": "Možnosti",
    +"Command": "Příkaz",
    +"Show notifications": "Zobrazit oznámení",
    +"Help": "Nápověda",
    +"Report an issue": "Nahlásit problém",
    +"Cycle Start": "Start cyklu",
     
    -
    

    Suggestion importance[1-10]: 7

    Why:

    7

    ✅ Suggestions up to commit ec1589a

    Category Suggestion                                                                                                                                    Score
    Enhancement

    ✅ Provide translations for all UI elements to ensure a fully localized experience

    _

    The translation for “Fork Widget” is missing. Consider adding a Czech translation
    that conveys the meaning of forking a widget in the context of the application.

    [src/app/i18n/cs/resource.json [109]](https://github.com/cncjs/cncjs/pull/884/files#diff-0dfa07cc230b97dc955c0244e13bc19832235b5f3bb317e7c1d87c86e0f06b3dR109-R109)

    -"Fork Widget": "Fork Widget",
    +"Fork Widget": "Vytvořit kopii widgetu",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 8

    Why: Adding a translation for “Fork Widget” enhances the localization of the application, ensuring that all UI elements are accessible to Czech-speaking users. This is important for maintaining a consistent user experience.

    8

    Simplify conditional logic by directly returning the result of the comparison

    _

    Simplify the removeUnusedKeys function by directly returning the result of the
    comparison, eliminating the need for an if-else structure.

    [i18next-scanner.app.config.js [23-28]](https://github.com/cncjs/cncjs/pull/884/files#diff-fe6e0f9fde69f4220cfe10008bb7f2d898baa987fbe2d406c455ff34ddbf99efR23-R28)

     removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    -    return true;
    -  }
    -  return false;
    +  return ns === 'resource';
     },
    

    Suggestion importance[1-10]: 7

    Why: Simplifying the function by directly returning the result of the comparison reduces code complexity and enhances readability, making the code more concise and easier to understand.

    7

    ✅ Use more specific terminology for technical terms to improve clarity

    _

    Consider using a more specific term for “Command” in Czech. “Příkaz” can be
    ambiguous. For CNC context, “Instrukce” or “Povel” might be more appropriate.

    [src/app/i18n/cs/resource.json [13]](https://github.com/cncjs/cncjs/pull/884/files#diff-0dfa07cc230b97dc955c0244e13bc19832235b5f3bb317e7c1d87c86e0f06b3dR13-R13)

    -"Command": "Příkaz",
    +"Command": "Instrukce",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why: The suggestion to use “Instrukce” instead of “Příkaz” could improve clarity in the CNC context, as “Příkaz” can be ambiguous. This change enhances the precision of the translation, making it more contextually appropriate.

    7

    ✅ Improve accuracy of technical translations to better convey functionality

    _

    The translation for “Keypad jogging” could be more precise. Consider using a term
    that specifically refers to machine control via keypad in Czech.

    [src/app/i18n/cs/resource.json [265]](https://github.com/cncjs/cncjs/pull/884/files#diff-0dfa07cc230b97dc955c0244e13bc19832235b5f3bb317e7c1d87c86e0f06b3dR265-R265)

    -"Keypad jogging": "Ovládání přes klávesnici",
    +"Keypad jogging": "Pohyb stroje klávesnicí",
    

    [Suggestion has been applied]

    Suggestion importance[1-10]: 7

    Why: The suggestion to change “Ovládání přes klávesnici” to “Pohyb stroje klávesnicí” provides a more precise translation that better describes the functionality of controlling machine movement via a keypad, improving user understanding.

    7

    Best practice

    Use more descriptive variable names to improve code readability

    _

    Consider using a more descriptive variable name instead of ns for clarity. For
    example, namespace would be more explicit.

    [i18next-scanner.app.config.js [23-28]](https://github.com/cncjs/cncjs/pull/884/files#diff-fe6e0f9fde69f4220cfe10008bb7f2d898baa987fbe2d406c455ff34ddbf99efR23-R28)

    -removeUnusedKeys: function(lng, ns, key) {
    -  if (ns === 'resource') {
    +removeUnusedKeys: function(lng, namespace, key) {
    +  if (namespace === 'resource') {
         return true;
       }
       return false;
     },
    

    Suggestion importance[1-10]: 6

    Why: The suggestion to use a more descriptive variable name like ‘namespace’ instead of ‘ns’ improves code readability and clarity, which is beneficial for maintainability and understanding of the code.

    6


    #7 – codiumai-pr-agent-free[bot] 于 2024-10-16

    Persistent review updated to latest commit https://github.com/cncjs/cncjs/commit/b803289a790f46d641d284c4352d68628cf2c097


    原始Issue: https://github.com/cncjs/cncjs/pull/884

    喜欢 (0)