itizawa 6 лет назад
Родитель
Сommit
137769cb05
64 измененных файлов с 537 добавлено и 537 удалено
  1. 298 0
      resource/locales/en-US/admin/admin.json
  2. 0 10
      resource/locales/en-US/admin/admin_top.json
  3. 0 38
      resource/locales/en-US/admin/app_setting.json
  4. 0 59
      resource/locales/en-US/admin/customize_setting.json
  5. 0 18
      resource/locales/en-US/admin/export_management.json
  6. 0 58
      resource/locales/en-US/admin/importer_management.json
  7. 0 35
      resource/locales/en-US/admin/markdown_setting.json
  8. 0 32
      resource/locales/en-US/admin/user_group_management.json
  9. 0 46
      resource/locales/en-US/admin/user_management.json
  10. 0 9
      resource/locales/en-US/common/toaster.json
  11. 9 0
      resource/locales/en-US/translation.json
  12. 4 4
      src/client/js/components/Admin/AdminHome/AdminHome.jsx
  13. 3 3
      src/client/js/components/Admin/AdminHome/InstalledPluginTable.jsx
  14. 10 10
      src/client/js/components/Admin/App/AppSetting.jsx
  15. 3 3
      src/client/js/components/Admin/App/AppSettingsPage.jsx
  16. 7 7
      src/client/js/components/Admin/App/AwsSetting.jsx
  17. 6 6
      src/client/js/components/Admin/App/MailSetting.jsx
  18. 2 2
      src/client/js/components/Admin/App/PluginSetting.jsx
  19. 4 4
      src/client/js/components/Admin/App/SiteUrlSetting.jsx
  20. 10 10
      src/client/js/components/Admin/Customize/CustomizeBehaviorSetting.jsx
  21. 4 4
      src/client/js/components/Admin/Customize/CustomizeCssSetting.jsx
  22. 15 15
      src/client/js/components/Admin/Customize/CustomizeFunctionSetting.jsx
  23. 3 3
      src/client/js/components/Admin/Customize/CustomizeHeaderSetting.jsx
  24. 3 3
      src/client/js/components/Admin/Customize/CustomizeHighlightSetting.jsx
  25. 13 13
      src/client/js/components/Admin/Customize/CustomizeLayoutOptions.jsx
  26. 2 2
      src/client/js/components/Admin/Customize/CustomizeLayoutSetting.jsx
  27. 4 4
      src/client/js/components/Admin/Customize/CustomizeScriptSetting.jsx
  28. 2 2
      src/client/js/components/Admin/Customize/CustomizeTitle.jsx
  29. 4 6
      src/client/js/components/Admin/ExportArchiveData/ArchiveFilesTable.jsx
  30. 3 3
      src/client/js/components/Admin/ExportArchiveData/ArchiveFilesTableMenu.jsx
  31. 6 6
      src/client/js/components/Admin/ExportArchiveData/SelectCollectionsModal.jsx
  32. 3 3
      src/client/js/components/Admin/ExportArchiveDataPage.jsx
  33. 2 2
      src/client/js/components/Admin/ImportData/GrowiArchive/ImportCollectionConfigurationModal.jsx
  34. 10 10
      src/client/js/components/Admin/ImportData/GrowiArchive/ImportForm.jsx
  35. 2 2
      src/client/js/components/Admin/ImportData/GrowiArchive/UploadForm.jsx
  36. 1 1
      src/client/js/components/Admin/ImportData/GrowiArchiveSection.jsx
  37. 13 13
      src/client/js/components/Admin/ImportDataPage.jsx
  38. 2 2
      src/client/js/components/Admin/ManageExternalAccount.jsx
  39. 4 4
      src/client/js/components/Admin/MarkdownSetting/LineBreakForm.jsx
  40. 6 6
      src/client/js/components/Admin/MarkdownSetting/MarkDownSetting.jsx
  41. 9 9
      src/client/js/components/Admin/MarkdownSetting/PresentationForm.jsx
  42. 4 4
      src/client/js/components/Admin/MarkdownSetting/WhiteListInput.jsx
  43. 7 7
      src/client/js/components/Admin/MarkdownSetting/XssForm.jsx
  44. 4 4
      src/client/js/components/Admin/UserGroup/UserGroupCreateForm.jsx
  45. 8 8
      src/client/js/components/Admin/UserGroup/UserGroupDeleteModal.jsx
  46. 1 1
      src/client/js/components/Admin/UserGroup/UserGroupTable.jsx
  47. 1 1
      src/client/js/components/Admin/UserGroupDetail/CheckBoxForSerchUserOption.jsx
  48. 1 1
      src/client/js/components/Admin/UserGroupDetail/RadioButtonForSerchUserOption.jsx
  49. 2 2
      src/client/js/components/Admin/UserGroupDetail/UserGroupDetailPage.jsx
  50. 1 1
      src/client/js/components/Admin/UserGroupDetail/UserGroupEditForm.jsx
  51. 1 1
      src/client/js/components/Admin/UserGroupDetail/UserGroupPageList.jsx
  52. 2 2
      src/client/js/components/Admin/UserGroupDetail/UserGroupUserModal.jsx
  53. 1 1
      src/client/js/components/Admin/UserGroupDetail/UserGroupUserTable.jsx
  54. 1 1
      src/client/js/components/Admin/UserManagement.jsx
  55. 7 7
      src/client/js/components/Admin/Users/ExternalAccountTable.jsx
  56. 1 1
      src/client/js/components/Admin/Users/GiveAdminButton.jsx
  57. 1 1
      src/client/js/components/Admin/Users/InviteUserControl.jsx
  58. 8 8
      src/client/js/components/Admin/Users/PasswordResetModal.jsx
  59. 3 3
      src/client/js/components/Admin/Users/RemoveAdminButton.jsx
  60. 1 1
      src/client/js/components/Admin/Users/StatusActivateButton.jsx
  61. 3 3
      src/client/js/components/Admin/Users/StatusSuspendedButton.jsx
  62. 8 8
      src/client/js/components/Admin/Users/UserInviteModal.jsx
  63. 3 3
      src/client/js/components/Admin/Users/UserMenu.jsx
  64. 1 1
      src/client/js/components/Admin/Users/UserTable.jsx

+ 298 - 0
resource/locales/en-US/admin/admin.json

@@ -0,0 +1,298 @@
+{
+  "admin_top": {
+    "management_wiki": "Management Wiki",
+    "system_information": "System Information",
+    "wiki_administrator": "Only Wiki administrator can access this page",
+    "assign_administrator": "You can assign administrator from Assign administrator button in the User management page",
+    "list_of_installed_plugins": "List of installed plugins",
+    "package_name": "Package name",
+    "specified_version": "Specified version",
+    "installed_version": "Installed version"
+  },
+  "app_setting": {
+    "site_name": "Site name",
+    "sitename_change": "You can change Site Name which is used for header and HTML title.",
+    "header_content": "The contents entered here will be shown in the header etc.",
+    "site_url_desc": "This is for the site URL setting.",
+    "site_url_warn": "Some features don't work because the site URL is not set.",
+    "siteurl_help": "Site full URL beginning from <code>http://</code> or <code>https://</code>.",
+    "confidential_name": "Confidential name",
+    "confidential_example": "ex): internal use only",
+    "default_language": "Default Language for new users",
+    "file_uploading": "File Uploading",
+    "enable_files_except_image": "Enable file upload other than image files.",
+    "attach_enable": "You can attach files other than image files if you enable this option.",
+    "update": "Update",
+    "mail_settings": "Mail settings",
+    "smtp_used": "If you have SMTP settings, it will be used.",
+    "smtp_but_aws": "If you do not have SMTP settings but AWS settings,  e-mails will be sent by SES.",
+    "neihter_of": "If you do not of neither of these, e-mails will not be sent.",
+    "from_e-mail_address": "From e-mail address",
+    "smtp_settings": "SMTP settings",
+    "host": "Host",
+    "port": "Port",
+    "user": "User",
+    "aws_settings": "AWS settings",
+    "aws_access": "This is for AWS settings. If you complete AWS settings, file upload function, profile picture function etc will be enabled.",
+    "no_smtp_setting": "If you do not have SMTP settings, e-mails will be sent via SES. You need to verify from e-mail address and production settings.",
+    "change_setting": "Caution:if you change this setting not completed, you will not be able to access files you have uploaded so far.",
+    "region": "Region",
+    "bucket_name": "Bucket name",
+    "custom_endpoint": "Custom endpoint",
+    "custom_endpoint_change": "Input the URL of the endpoint of an object storage service like MinIO that has a S3-compatible API.  Amazon S3 is used if empty.",
+    "plugin_settings": "Plugin settings",
+    "enable_plugin_loading": "Enable plugin loading",
+    "load_plugins": "Load_plugins",
+    "enable": "Enable",
+    "disable": "Disable",
+    "use_env_var_if_empty": "If the value in the database is empty, the value of the environment variable <cod>{{variable}}</code> is used."
+  },
+  "markdown_setting": {
+    "lineBreak_header": "Line Break Setting",
+    "lineBreak_desc": "You can change line break settings.",
+    "lineBreak_options": {
+      "enable_lineBreak": "Enable Line Break",
+      "enable_lineBreak_desc": "Treat line break in the text page as<code>&lt;br&gt;</code>in HTML",
+      "enable_lineBreak_for_comment": "Enable Line Break in comment",
+      "enable_lineBreak_for_comment_desc": "Treat line break in comment as<code>&lt;br&gt;</code>in HTML"
+    },
+    "presentation_header": "Presentation Setting",
+    "presentation_desc": "You can change presentation settings.",
+    "presentation_options": {
+      "page_break_setting": "Page break Setting",
+      "preset_one_separator": "Preset 1",
+      "preset_one_separator_desc": "3 Blank lines",
+      "preset_one_separator_value": "\\n\\n\\n",
+      "preset_two_separator": "Preset 2",
+      "preset_two_separator_desc": "5 Hyphens",
+      "preset_two_separator_value": "-----",
+      "custom_separator": "Custom",
+      "custom_separator_desc": "Regular Expression"
+    },
+    "xss_header": "Prevent XSS(Cross Site Scripting) Setting",
+    "xss_desc": "You can change the handling of HTML tags in markdown text.",
+    "xss_options": {
+      "enable_xss_prevention": "Enable XSS Prevention",
+      "ignore_all_tags": "Ignore All Tags",
+      "ignore_all_tags_desc": "Stripe all HTML tags and attributes",
+      "recommended_setting": "Recommended Setting",
+      "custom_whitelist": "Custom Whitelist",
+      "tag_names": "Tag names",
+      "tag_attributes": "Tag attributes",
+      "import_recommended": "Import recommended {{target}}"
+    }
+  },
+  "customize_setting": {
+    "recommended": "Recommended",
+    "layout": "Layout",
+    "theme": "Theme",
+    "layout_desc": {
+      "growi_title": "Simple and Clear",
+      "growi_text1": "Full screen layout and thin margins/paddings",
+      "growi_text2": "Show and post comments at the bottom of the page",
+      "growi_text3": "Affix Table-of-contents",
+      "kibela_title": "Easy Viewing Structure",
+      "kibela_text1": "Center aligned contents",
+      "kibela_text2": "Show and post comments at the bottom of the page",
+      "kibela_text3": "Affix Table-of-contents",
+      "crowi_title": "Separated Functions",
+      "crowi_text1": "Collapsible Sidebar",
+      "crowi_text2": "Show and post comments in Sidebar",
+      "crowi_text3": "Collapsible Table-of-contents"
+    },
+    "behavior": "Behavior",
+    "behavior_desc": {
+      "growi_text1": "Both of <code>/page</code> and <code>/page/</code> shows the same page。",
+      "growi_text2": "<code>/nonexistent_page</code> shows editing form",
+      "growi_text3": "All pages shows the list of sub pages <b>if using GROWI Enhanced Layout</b>",
+      "crowi_text1": "<code>/page</code> shows the page",
+      "crowi_text2": "<code>/page/</code> shows the list of sub pages",
+      "crowi_text3": "If portal is applied to <code>/page/</code> , the portal and the list of sub pages are shown",
+      "crowi_text4": "<code>/nonexistent_page</code> shows editing form<",
+      "crowi_text5": "<code>/nonexistent_page/</code> the list of sub pages"
+    },
+    "function": "Function",
+    "function_desc": "You can choose Valid/Invalid of the function",
+    "function_options": {
+      "timeline": "Timeline function",
+      "timeline_desc1": "You can show the timeline of the subpages.",
+      "timeline_desc2": "If there are many subpages, performance decreases while page loading.",
+      "timeline_desc3": "You can speed up list page display by invalidating.",
+      "tab_switch": "Save tab-switching in the browser",
+      "tab_switch_desc1": "Save edit tab and history tab switching in the browser and make it object for forward/back command of the browser.",
+      "tab_switch_desc2": "By invalidating, you can make page transition as the only object for forward/back command of the browser.",
+      "attach_title_header": "Add h1 section when create new page automatically",
+      "attach_title_header_desc": "Add page path to the first line as h1 section when create new page",
+      "recent_created__n_draft_num_desc": "Number of Recently Created Pages & Drafts Displayed",
+      "recently_created_n_draft_num_desc": "Number of recently created pages and drafts displayed on user page",
+      "stale_notification": "Display Notification on Stale Pages",
+      "stale_notification_desc": "Displays the notification to pages more than 1 year since the last update."
+    },
+    "code_highlight": "Code Highlight",
+    "nocdn_desc": "This function is disabled when the environment variable <code>NO_CDN=true</code>.<br>Github style has been forcibly applied.",
+    "custom_title": "Custom Title",
+    "custom_title_detail": "You can customize <code>&lt;title&gt;</code> tag.<br><code>&#123;&#123;sitename&#125;&#125;</code> will be automatically replaced with the app name, and <code>&#123;&#123;page&#125;&#125;</code> will be replaced with the page name/path.",
+    "custom_header": "Custom HTML Header",
+    "custom_header_detail": "You can customize HTML header that applies all pages. Your custom script will be inserted in <code>&lt;header&gt;</code> but above other <code>&lt;script&gt;</code> tags.<br>Relaod page to see changes.",
+    "custom_css": "Custom CSS",
+    "write_css": "You can write CSS that is applied to whole system.",
+    "ctrl_space": "Ctrl+Space to Autocomplete",
+    "custom_script": "Custom script",
+    "write_java": "You can write Javascript that is applied to whole system.",
+    "reflect_change": "You need to reload the page to reflect the change."
+  },
+  "importer_management": {
+    "beta_warning": "This function is Beta.",
+    "import_from": "Import from {{from}}",
+    "import_growi_archive": "Import GROWI Archive",
+    "growi_settings": {
+      "overwrite_documents": "Imported documents will overwrite existing documents",
+      "growi_archive_file": "GROWI Archive File",
+      "uploaded_data": "Uploaded Data",
+      "extracted_file": "Extracted File",
+      "collection": "Collection",
+      "upload": "Upload",
+      "discard": "Discard Uploaded Data",
+      "errors": {
+        "at_least_one": "Select one or more collections.",
+        "page_and_revision": "'Pages' and 'Revisions' must be imported both.",
+        "depends": "'{{target}}' must be selected when '{{condition}}' is selected."
+      },
+      "configuration": {
+        "pages": {
+          "overwrite_author": {
+            "label": "Overwrite page's author with the current user",
+            "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
+          },
+          "set_public_to_page": {
+            "label": "Set 'Public' to the pages that is '{{from}}'",
+            "desc": "Make sure that this configuration makes all <b>'{{from}}'</b> pages readable from <span class=\"text-danger\">ANY users</span>."
+          },
+          "initialize_meta_datas": {
+            "label": "Initialize page's like, read users and comment count",
+            "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
+          },
+          "initialize_hackmd_related_datas": {
+            "label": "Initialize HackMD related data",
+            "desc": "Recommended to check this unless there is important drafts on HackMD."
+          }
+        },
+        "revisions": {
+          "overwrite_author": {
+            "label": "Overwrite revision's author with the current user",
+            "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
+          }
+        }
+      }
+    },
+    "esa_settings": {
+      "team_name": "Team name",
+      "access_token": "Access token",
+      "test_connection": "Test connection to esa"
+    },
+    "qiita_settings": {
+      "team_name": "Team name",
+      "access_token": "Access token",
+      "test_connection": "Test connection to qiita:team"
+    },
+    "import": "Import",
+    "page_skip": "Pages with a name that already exists on GROWI are not imported",
+    "Directory_hierarchy_tag": "Directory Hierarchy Tag"
+  },
+  "export_management": {
+    "exporting_collection_list": "Exporting Collection List",
+    "exported_data_list": "Exported Archive Data List",
+    "export_collections": "Export Collections",
+    "check_all": "Check All",
+    "uncheck_all": "Uncheck All",
+    "desc_password_seed": "DO NOT FORGET to set current <code>PASSWORD_SEED</code> to your new GROWI system when restoring user data, or users will NOT be able to login with their password.<br><br><strong>HINT:</strong><br>The current <code>PASSWORD_SEED</code> will be stored in <code>meta.json</code> in exported ZIP.",
+    "create_new_archive_data": "Create New Archive Data",
+    "export": "Export",
+    "cancel": "Cancel",
+    "file": "File",
+    "growi_version": "Growi Version",
+    "collections": "Collections",
+    "exported_at": "Exported At",
+    "export_menu": "Export Menu",
+    "download": "Download",
+    "delete": "Delete"
+  },
+  "user_management": {
+    "invite_users": "Invite New Users",
+    "invite_modal": {
+      "emails": "Emails",
+      "invite_thru_email": "Send Invitation Email",
+      "valid_email": "Valid email address is required",
+      "temporary_password": "The created user has a temporary password",
+      "send_new_password": "Please send the new password to the user.",
+      "send_temporary_password": "Be sure to copy the temporary password ON THIS SCREEN and send it to the user.",
+      "existing_email": "The following emails already exist"
+    },
+    "user_table": {
+      "administrator": "Administrator",
+      "edit_menu": "Edit Menu",
+      "reset_password": "Reset Password",
+      "administrator_menu": "Administrator Menu",
+      "accept": "Accept",
+      "deactivate_account": "Deactivate Account",
+      "your_own": "You cannot deactivate your own account",
+      "remove_admin_access": "Remove Admin Access",
+      "cannot_remove": "You cannot remove yourself from administrator",
+      "give_admin_access": "Give Admin Access"
+    },
+    "reset_password": "Reset Password",
+    "reset_password_modal": {
+      "password_never_seen": "The temporary password can never be retrieved after this screen is closed.",
+      "password_reset_message": "Let the user know the new password below and strongly recommend to change another one immediately.",
+      "send_new_password": "Please send the new password to the user.",
+      "target_user": "Target User",
+      "new_password": "New Password"
+    },
+    "external_account": "External Account Management",
+    "external_account_list": "External Account List",
+    "invite": "Invite",
+    "invited": "User was invited",
+    "back_to_user_management": "Back to User Management",
+    "authentication_provider": "Authentication Provider",
+    "manage": "Manage",
+    "password_setting": "Password Setting",
+    "password_setting_help": "Is password set?",
+    "set": "Yes",
+    "unset": "No",
+    "related_username": "Related user's ",
+    "cannot_invite_maximum_users": "Can not invite more than the maximum number of users.",
+    "current_users": "Current users:"
+  },
+  "user_group_management": {
+    "create_group": "Create New Group",
+    "deny_create_group": "You can't create a new group with the current settings",
+    "group_name": "Group Name",
+    "group_example": "e.g. : Group1",
+    "add_modal": {
+      "add_user": "Add a User to the Created Group",
+      "search_option": "Search Option",
+      "enable_option": "Enable {{option}}",
+      "forward_match": "forword match",
+      "partial_match": "partial match",
+      "backward_match": "backward match"
+    },
+    "group_list": "Group List",
+    "back_to_list": "Go Back to Group List",
+    "basic_info": "Basic Info",
+    "user_list": "User List",
+    "created_group": "Group was created",
+    "is_loading_data": "fetch data...",
+    "no_pages": "There are no pages the group has view permission",
+    "remove_from_group": "Remove this user",
+    "delete_modal": {
+      "header": "Delete Group",
+      "desc": "Once deleted, the deleted group and its private pages cannot be retrieved",
+      "dropdown_desc": "Choose an action for private pages",
+      "select_group": "Select a group",
+      "no_groups": "No groups to select",
+      "publish_pages": "Publish All",
+      "delete_pages": "Delete All",
+      "transfer_pages": "Transfer to another group"
+    }
+  }
+}

+ 0 - 10
resource/locales/en-US/admin/admin_top.json

@@ -1,10 +0,0 @@
-{
-  "management_wiki": "Management Wiki",
-  "system_information": "System Information",
-  "wiki_administrator": "Only Wiki administrator can access this page",
-  "assign_administrator": "You can assign administrator from Assign administrator button in the User management page",
-  "list_of_installed_plugins": "List of installed plugins",
-  "package_name": "Package name",
-  "specified_version": "Specified version",
-  "installed_version": "Installed version"
-}

+ 0 - 38
resource/locales/en-US/admin/app_setting.json

@@ -1,38 +0,0 @@
-  {
-    "site_name": "Site name",
-    "sitename_change": "You can change Site Name which is used for header and HTML title.",
-    "header_content": "The contents entered here will be shown in the header etc.",
-    "site_url_desc": "This is for the site URL setting.",
-    "site_url_warn": "Some features don't work because the site URL is not set.",
-    "siteurl_help": "Site full URL beginning from <code>http://</code> or <code>https://</code>.",
-    "confidential_name": "Confidential name",
-    "confidential_example": "ex): internal use only",
-    "default_language": "Default Language for new users",
-    "file_uploading": "File Uploading",
-    "enable_files_except_image": "Enable file upload other than image files.",
-    "attach_enable": "You can attach files other than image files if you enable this option.",
-    "update": "Update",
-    "mail_settings": "Mail settings",
-    "smtp_used": "If you have SMTP settings, it will be used.",
-    "smtp_but_aws": "If you do not have SMTP settings but AWS settings,  e-mails will be sent by SES.",
-    "neihter_of": "If you do not of neither of these, e-mails will not be sent.",
-    "from_e-mail_address": "From e-mail address",
-    "smtp_settings": "SMTP settings",
-    "host": "Host",
-    "port": "Port",
-    "user": "User",
-    "aws_settings": "AWS settings",
-    "aws_access": "This is for AWS settings. If you complete AWS settings, file upload function, profile picture function etc will be enabled.",
-    "no_smtp_setting": "If you do not have SMTP settings, e-mails will be sent via SES. You need to verify from e-mail address and production settings.",
-    "change_setting": "Caution:if you change this setting not completed, you will not be able to access files you have uploaded so far.",
-    "region": "Region",
-    "bucket_name": "Bucket name",
-    "custom_endpoint": "Custom endpoint",
-    "custom_endpoint_change": "Input the URL of the endpoint of an object storage service like MinIO that has a S3-compatible API.  Amazon S3 is used if empty.",
-    "plugin_settings": "Plugin settings",
-    "enable_plugin_loading": "Enable plugin loading",
-    "load_plugins": "Load_plugins",
-    "enable": "Enable",
-    "disable": "Disable",
-    "use_env_var_if_empty": "If the value in the database is empty, the value of the environment variable <cod>{{variable}}</code> is used."
-  }

+ 0 - 59
resource/locales/en-US/admin/customize_setting.json

@@ -1,59 +0,0 @@
-{
-  "recommended": "Recommended",
-  "layout": "Layout",
-  "theme": "Theme",
-  "layout_desc": {
-    "growi_title": "Simple and Clear",
-    "growi_text1": "Full screen layout and thin margins/paddings",
-    "growi_text2": "Show and post comments at the bottom of the page",
-    "growi_text3": "Affix Table-of-contents",
-    "kibela_title": "Easy Viewing Structure",
-    "kibela_text1": "Center aligned contents",
-    "kibela_text2": "Show and post comments at the bottom of the page",
-    "kibela_text3": "Affix Table-of-contents",
-    "crowi_title": "Separated Functions",
-    "crowi_text1": "Collapsible Sidebar",
-    "crowi_text2": "Show and post comments in Sidebar",
-    "crowi_text3": "Collapsible Table-of-contents"
-  },
-  "behavior": "Behavior",
-  "behavior_desc": {
-    "growi_text1": "Both of <code>/page</code> and <code>/page/</code> shows the same page。",
-    "growi_text2": "<code>/nonexistent_page</code> shows editing form",
-    "growi_text3": "All pages shows the list of sub pages <b>if using GROWI Enhanced Layout</b>",
-    "crowi_text1": "<code>/page</code> shows the page",
-    "crowi_text2": "<code>/page/</code> shows the list of sub pages",
-    "crowi_text3": "If portal is applied to <code>/page/</code> , the portal and the list of sub pages are shown",
-    "crowi_text4": "<code>/nonexistent_page</code> shows editing form<",
-    "crowi_text5": "<code>/nonexistent_page/</code> the list of sub pages"
-  },
-  "function": "Function",
-  "function_desc": "You can choose Valid/Invalid of the function",
-  "function_options": {
-    "timeline": "Timeline function",
-    "timeline_desc1": "You can show the timeline of the subpages.",
-    "timeline_desc2": "If there are many subpages, performance decreases while page loading.",
-    "timeline_desc3": "You can speed up list page display by invalidating.",
-    "tab_switch": "Save tab-switching in the browser",
-    "tab_switch_desc1": "Save edit tab and history tab switching in the browser and make it object for forward/back command of the browser.",
-    "tab_switch_desc2": "By invalidating, you can make page transition as the only object for forward/back command of the browser.",
-    "attach_title_header": "Add h1 section when create new page automatically",
-    "attach_title_header_desc": "Add page path to the first line as h1 section when create new page",
-    "recent_created__n_draft_num_desc": "Number of Recently Created Pages & Drafts Displayed",
-    "recently_created_n_draft_num_desc": "Number of recently created pages and drafts displayed on user page",
-    "stale_notification": "Display Notification on Stale Pages",
-    "stale_notification_desc": "Displays the notification to pages more than 1 year since the last update."
-  },
-  "code_highlight": "Code Highlight",
-  "nocdn_desc": "This function is disabled when the environment variable <code>NO_CDN=true</code>.<br>Github style has been forcibly applied.",
-  "custom_title": "Custom Title",
-  "custom_title_detail": "You can customize <code>&lt;title&gt;</code> tag.<br><code>&#123;&#123;sitename&#125;&#125;</code> will be automatically replaced with the app name, and <code>&#123;&#123;page&#125;&#125;</code> will be replaced with the page name/path.",
-  "custom_header": "Custom HTML Header",
-  "custom_header_detail": "You can customize HTML header that applies all pages. Your custom script will be inserted in <code>&lt;header&gt;</code> but above other <code>&lt;script&gt;</code> tags.<br>Relaod page to see changes.",
-  "custom_css": "Custom CSS",
-  "write_css": "You can write CSS that is applied to whole system.",
-  "ctrl_space": "Ctrl+Space to Autocomplete",
-  "custom_script": "Custom script",
-  "write_java": "You can write Javascript that is applied to whole system.",
-  "reflect_change": "You need to reload the page to reflect the change."
-}

+ 0 - 18
resource/locales/en-US/admin/export_management.json

@@ -1,18 +0,0 @@
-{
-  "exporting_collection_list": "Exporting Collection List",
-  "exported_data_list": "Exported Archive Data List",
-  "export_collections": "Export Collections",
-  "check_all": "Check All",
-  "uncheck_all": "Uncheck All",
-  "desc_password_seed": "DO NOT FORGET to set current <code>PASSWORD_SEED</code> to your new GROWI system when restoring user data, or users will NOT be able to login with their password.<br><br><strong>HINT:</strong><br>The current <code>PASSWORD_SEED</code> will be stored in <code>meta.json</code> in exported ZIP.",
-  "create_new_archive_data": "Create New Archive Data",
-  "export": "Export",
-  "cancel": "Cancel",
-  "file": "File",
-  "growi_version": "Growi Version",
-  "collections": "Collections",
-  "exported_at": "Exported At",
-  "export_menu": "Export Menu",
-  "download": "Download",
-  "delete": "Delete"
-}

+ 0 - 58
resource/locales/en-US/admin/importer_management.json

@@ -1,58 +0,0 @@
-{
-  "beta_warning": "This function is Beta.",
-  "import_from": "Import from {{from}}",
-  "import_growi_archive": "Import GROWI Archive",
-  "growi_settings": {
-    "overwrite_documents": "Imported documents will overwrite existing documents",
-    "growi_archive_file": "GROWI Archive File",
-    "uploaded_data": "Uploaded Data",
-    "extracted_file": "Extracted File",
-    "collection": "Collection",
-    "upload": "Upload",
-    "discard": "Discard Uploaded Data",
-    "errors": {
-      "at_least_one": "Select one or more collections.",
-      "page_and_revision": "'Pages' and 'Revisions' must be imported both.",
-      "depends": "'{{target}}' must be selected when '{{condition}}' is selected."
-    },
-    "configuration": {
-      "pages": {
-        "overwrite_author": {
-          "label": "Overwrite page's author with the current user",
-          "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
-        },
-        "set_public_to_page": {
-          "label": "Set 'Public' to the pages that is '{{from}}'",
-          "desc": "Make sure that this configuration makes all <b>'{{from}}'</b> pages readable from <span class=\"text-danger\">ANY users</span>."
-        },
-        "initialize_meta_datas": {
-          "label": "Initialize page's like, read users and comment count",
-          "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
-        },
-        "initialize_hackmd_related_datas": {
-          "label": "Initialize HackMD related data",
-          "desc": "Recommended to check this unless there is important drafts on HackMD."
-        }
-      },
-      "revisions": {
-        "overwrite_author": {
-          "label": "Overwrite revision's author with the current user",
-          "desc": "Recommended <span class=\"text-danger\">NOT</span> to check this when users will also be restored."
-        }
-      }
-    }
-  },
-  "esa_settings": {
-    "team_name": "Team name",
-    "access_token": "Access token",
-    "test_connection": "Test connection to esa"
-  },
-  "qiita_settings": {
-    "team_name": "Team name",
-    "access_token": "Access token",
-    "test_connection": "Test connection to qiita:team"
-  },
-  "import": "Import",
-  "page_skip": "Pages with a name that already exists on GROWI are not imported",
-  "Directory_hierarchy_tag": "Directory Hierarchy Tag"
-}

+ 0 - 35
resource/locales/en-US/admin/markdown_setting.json

@@ -1,35 +0,0 @@
-{
-  "lineBreak_header": "Line Break Setting",
-  "lineBreak_desc": "You can change line break settings.",
-  "lineBreak_options": {
-    "enable_lineBreak": "Enable Line Break",
-    "enable_lineBreak_desc": "Treat line break in the text page as<code>&lt;br&gt;</code>in HTML",
-    "enable_lineBreak_for_comment": "Enable Line Break in comment",
-    "enable_lineBreak_for_comment_desc": "Treat line break in comment as<code>&lt;br&gt;</code>in HTML"
-  },
-  "presentation_header": "Presentation Setting",
-  "presentation_desc": "You can change presentation settings.",
-  "presentation_options": {
-    "page_break_setting": "Page break Setting",
-    "preset_one_separator": "Preset 1",
-    "preset_one_separator_desc": "3 Blank lines",
-    "preset_one_separator_value": "\\n\\n\\n",
-    "preset_two_separator": "Preset 2",
-    "preset_two_separator_desc": "5 Hyphens",
-    "preset_two_separator_value": "-----",
-    "custom_separator": "Custom",
-    "custom_separator_desc": "Regular Expression"
-  },
-  "xss_header": "Prevent XSS(Cross Site Scripting) Setting",
-  "xss_desc": "You can change the handling of HTML tags in markdown text.",
-  "xss_options": {
-    "enable_xss_prevention": "Enable XSS Prevention",
-    "ignore_all_tags": "Ignore All Tags",
-    "ignore_all_tags_desc": "Stripe all HTML tags and attributes",
-    "recommended_setting": "Recommended Setting",
-    "custom_whitelist": "Custom Whitelist",
-    "tag_names": "Tag names",
-    "tag_attributes": "Tag attributes",
-    "import_recommended": "Import recommended {{target}}"
-  }
-}

+ 0 - 32
resource/locales/en-US/admin/user_group_management.json

@@ -1,32 +0,0 @@
-{
-  "create_group": "Create New Group",
-  "deny_create_group": "You can't create a new group with the current settings",
-  "group_name": "Group Name",
-  "group_example": "e.g. : Group1",
-  "add_modal": {
-    "add_user": "Add a User to the Created Group",
-    "search_option": "Search Option",
-    "enable_option": "Enable {{option}}",
-    "forward_match": "forword match",
-    "partial_match": "partial match",
-    "backward_match": "backward match"
-  },
-  "group_list": "Group List",
-  "back_to_list": "Go Back to Group List",
-  "basic_info": "Basic Info",
-  "user_list": "User List",
-  "created_group": "Group was created",
-  "is_loading_data": "fetch data...",
-  "no_pages": "There are no pages the group has view permission",
-  "remove_from_group": "Remove this user",
-  "delete_modal": {
-    "header": "Delete Group",
-    "desc": "Once deleted, the deleted group and its private pages cannot be retrieved",
-    "dropdown_desc": "Choose an action for private pages",
-    "select_group": "Select a group",
-    "no_groups": "No groups to select",
-    "publish_pages": "Publish All",
-    "delete_pages": "Delete All",
-    "transfer_pages": "Transfer to another group"
-  }
-}

+ 0 - 46
resource/locales/en-US/admin/user_management.json

@@ -1,46 +0,0 @@
-{
-  "invite_users": "Invite New Users",
-  "invite_modal": {
-    "emails": "Emails",
-    "invite_thru_email": "Send Invitation Email",
-    "valid_email": "Valid email address is required",
-    "temporary_password": "The created user has a temporary password",
-    "send_new_password": "Please send the new password to the user.",
-    "send_temporary_password": "Be sure to copy the temporary password ON THIS SCREEN and send it to the user.",
-    "existing_email": "The following emails already exist"
-  },
-  "user_table": {
-    "administrator": "Administrator",
-    "edit_menu": "Edit Menu",
-    "reset_password": "Reset Password",
-    "administrator_menu": "Administrator Menu",
-    "accept": "Accept",
-    "deactivate_account": "Deactivate Account",
-    "your_own": "You cannot deactivate your own account",
-    "remove_admin_access": "Remove Admin Access",
-    "cannot_remove": "You cannot remove yourself from administrator",
-    "give_admin_access": "Give Admin Access"
-  },
-  "reset_password": "Reset Password",
-  "reset_password_modal": {
-    "password_never_seen": "The temporary password can never be retrieved after this screen is closed.",
-    "password_reset_message": "Let the user know the new password below and strongly recommend to change another one immediately.",
-    "send_new_password": "Please send the new password to the user.",
-    "target_user": "Target User",
-    "new_password": "New Password"
-  },
-  "external_account": "External Account Management",
-  "external_account_list": "External Account List",
-  "invite": "Invite",
-  "invited": "User was invited",
-  "back_to_user_management": "Back to User Management",
-  "authentication_provider": "Authentication Provider",
-  "manage": "Manage",
-  "password_setting": "Password Setting",
-  "password_setting_help": "Is password set?",
-  "set": "Yes",
-  "unset": "No",
-  "related_username": "Related user's ",
-  "cannot_invite_maximum_users": "Can not invite more than the maximum number of users.",
-  "current_users": "Current users:"
-}

+ 0 - 9
resource/locales/en-US/common/toaster.json

@@ -1,9 +0,0 @@
-{
-  "update_successed": "Succeeded to update {{target}} setting",
-  "give_user_admin": "Succeeded to give {{username}} admin",
-  "remove_user_admin": "Succeeded to remove {{username}} admin ",
-  "activate_user_success": "Succeeded to activating {{username}}",
-  "deactivate_user_success": "Succeeded to deactivate {{username}}",
-  "remove_user_success": "Succeeded to removing {{username}} ",
-  "remove_external_user_success": "Succeeded to remove {{accountId}} "
-}

+ 9 - 0
resource/locales/en-US/translation.json

@@ -305,6 +305,15 @@
       "Post": "Post"
     }
   },
+  "toaster": {
+    "update_successed": "Succeeded to update {{target}} setting",
+    "give_user_admin": "Succeeded to give {{username}} admin",
+    "remove_user_admin": "Succeeded to remove {{username}} admin ",
+    "activate_user_success": "Succeeded to activating {{username}}",
+    "deactivate_user_success": "Succeeded to deactivate {{username}}",
+    "remove_user_success": "Succeeded to removing {{username}} ",
+    "remove_external_user_success": "Succeeded to remove {{accountId}} "
+  },
   "template": {
     "modal_label": {
       "Create/Edit Template Page": "Create/Edit Template Page",

+ 4 - 4
src/client/js/components/Admin/AdminHome/AdminHome.jsx

@@ -34,21 +34,21 @@ class AdminHome extends React.Component {
     return (
       <Fragment>
         <p>
-          {t('admin_top:wiki_administrator')}
+          {t('admin:admin_top.wiki_administrator')}
           <br></br>
-          {t('admin_top:assign_administrator')}
+          {t('admin:admin_top.assign_administrator')}
         </p>
 
         <div className="row mb-5">
           <div className="col-md-12">
-            <h2 className="admin-setting-header">{t('admin_top:system_information')}</h2>
+            <h2 className="admin-setting-header">{t('admin:admin_top.system_information')}</h2>
             <SystemInfomationTable />
           </div>
         </div>
 
         <div className="row mb-5">
           <div className="col-md-12">
-            <h2 className="admin-setting-header">{t('admin_top:list_of_installed_plugins')}</h2>
+            <h2 className="admin-setting-header">{t('admin:admin_top.list_of_installed_plugins')}</h2>
             <InstalledPluginTable />
           </div>
         </div>

+ 3 - 3
src/client/js/components/Admin/AdminHome/InstalledPluginTable.jsx

@@ -15,9 +15,9 @@ class InstalledPluginTable extends React.Component {
       <table className="table table-bordered">
         <thead>
           <tr>
-            <th className="text-center">{t('admin_top:package_name')}</th>
-            <th className="text-center">{t('admin_top:specified_version')}</th>
-            <th className="text-center">{t('admin_top:installed_version')}</th>
+            <th className="text-center">{t('admin:admin_top.package_name')}</th>
+            <th className="text-center">{t('admin:admin_top.specified_version')}</th>
+            <th className="text-center">{t('admin:admin_top.installed_version')}</th>
           </tr>
         </thead>
         <tbody>

+ 10 - 10
src/client/js/components/Admin/App/AppSetting.jsx

@@ -39,7 +39,7 @@ class AppSetting extends React.Component {
     return (
       <React.Fragment>
         <div className="row md-5">
-          <label className="col-xs-3 control-label">{t('app_setting:site_name')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.site_name')}</label>
           <div className="col-xs-6">
             <input
               className="form-control"
@@ -48,26 +48,26 @@ class AppSetting extends React.Component {
               onChange={(e) => { adminAppContainer.changeTitle(e.target.value) }}
               placeholder="GROWI"
             />
-            <p className="help-block">{t('app_setting:sitename_change')}</p>
+            <p className="help-block">{t('admin:app_setting.sitename_change')}</p>
           </div>
         </div>
 
         <div className="row md-5">
-          <label className="col-xs-3 control-label">{t('app_setting:confidential_name')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.confidential_name')}</label>
           <div className="col-xs-6">
             <input
               className="form-control"
               type="text"
               defaultValue={adminAppContainer.state.confidential}
               onChange={(e) => { adminAppContainer.changeConfidential(e.target.value) }}
-              placeholder={t('app_setting:confidential_example')}
+              placeholder={t('admin:app_setting.confidential_example')}
             />
-            <p className="help-block">{t('app_setting:header_content')}</p>
+            <p className="help-block">{t('admin:app_setting.header_content')}</p>
           </div>
         </div>
 
         <div className="row md-5">
-          <label className="col-xs-3 control-label">{t('app_setting:default_language')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.default_language')}</label>
           <div className="col-xs-6">
             <div className="radio radio-primary radio-inline">
               <input
@@ -95,7 +95,7 @@ class AppSetting extends React.Component {
         </div>
 
         <div className="row md-5">
-          <label className="col-xs-3 control-label">{t('app_setting:file_uploading')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.file_uploading')}</label>
           <div className="col-xs-6">
             <div className="checkbox checkbox-info">
               <input
@@ -105,13 +105,13 @@ class AppSetting extends React.Component {
                 checked={adminAppContainer.state.fileUpload}
                 onChange={(e) => { adminAppContainer.changeFileUpload(e.target.checked) }}
               />
-              <label htmlFor="cbFileUpload">{t('app_setting:enable_files_except_image')}</label>
+              <label htmlFor="cbFileUpload">{t('admin:app_setting.enable_files_except_image')}</label>
             </div>
 
             <p className="help-block">
-              {t('app_setting:enable_files_except_image')}
+              {t('admin:app_setting.enable_files_except_image')}
               <br />
-              {t('app_setting:attach_enable')}
+              {t('admin:app_setting.attach_enable')}
             </p>
           </div>
         </div>

+ 3 - 3
src/client/js/components/Admin/App/AppSettingsPage.jsx

@@ -53,21 +53,21 @@ class AppSettingsPage extends React.Component {
 
         <div className="row mt-5">
           <div className="col-md-12">
-            <h2 className="admin-setting-header">{t('app_setting:mail_settings')}</h2>
+            <h2 className="admin-setting-header">{t('admin:app_setting.mail_settings')}</h2>
             <MailSetting />
           </div>
         </div>
 
         <div className="row mt-5">
           <div className="col-md-12">
-            <h2 className="admin-setting-header">{t('app_setting:aws_settings')}</h2>
+            <h2 className="admin-setting-header">{t('admin:app_setting.aws_settings')}</h2>
             <AwsSetting />
           </div>
         </div>
 
         <div className="row mt-5">
           <div className="col-md-12">
-            <h2 className="admin-setting-header">{t('app_setting:plugin_settings')}</h2>
+            <h2 className="admin-setting-header">{t('admin:app_setting.plugin_settings')}</h2>
             <PluginSetting />
           </div>
         </div>

+ 7 - 7
src/client/js/components/Admin/App/AwsSetting.jsx

@@ -39,20 +39,20 @@ class AwsSetting extends React.Component {
     return (
       <React.Fragment>
         <p className="well">
-          {t('app_setting:aws_access')}
+          {t('admin:app_setting.aws_access')}
           <br />
-          {t('app_setting:no_smtp_setting')}
+          {t('admin:app_setting.no_smtp_setting')}
           <br />
           <br />
           <span className="text-danger">
             <i className="ti-unlink"></i>
-            {t('app_setting:change_setting')}
+            {t('admin:app_setting.change_setting')}
           </span>
         </p>
 
         <div className="row mb-5">
           <label className="col-xs-3 control-label">
-            {t('app_setting:region')}
+            {t('admin:app_setting.region')}
           </label>
           <div className="col-xs-6">
             <input
@@ -68,7 +68,7 @@ class AwsSetting extends React.Component {
 
         <div className="row mb-5">
           <label className="col-xs-3 control-label">
-            {t('app_setting:custom_endpoint')}
+            {t('admin:app_setting.custom_endpoint')}
           </label>
           <div className="col-xs-6">
             <input
@@ -80,13 +80,13 @@ class AwsSetting extends React.Component {
                 adminAppContainer.changeCustomEndpoint(e.target.value);
               }}
             />
-            <p className="help-block">{t('app_setting:custom_endpoint_change')}</p>
+            <p className="help-block">{t('admin:app_setting.custom_endpoint_change')}</p>
           </div>
         </div>
 
         <div className="row mb-5">
           <label className="col-xs-3 control-label">
-            {t('app_setting:bucket_name')}
+            {t('admin:app_setting.bucket_name')}
           </label>
           <div className="col-xs-6">
             <input

+ 6 - 6
src/client/js/components/Admin/App/MailSetting.jsx

@@ -38,9 +38,9 @@ class MailSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <p className="well">{t('app_setting:smtp_used')} {t('app_setting:smtp_but_aws')}<br />{t('app_setting:neihter_of')}</p>
+        <p className="well">{t('admin:app_setting.smtp_used')} {t('admin:app_setting.smtp_but_aws')}<br />{t('admin:app_setting.neihter_of')}</p>
         <div className="row mb-5">
-          <label className="col-xs-3 control-label">{t('app_setting:from_e-mail_address')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.from_e-mail_address')}</label>
           <div className="col-xs-6">
             <input
               className="form-control"
@@ -53,9 +53,9 @@ class MailSetting extends React.Component {
         </div>
 
         <div className="row mb-5">
-          <label className="col-xs-3 control-label">{t('app_setting:smtp_settings')}</label>
+          <label className="col-xs-3 control-label">{t('admin:app_setting.smtp_settings')}</label>
           <div className="col-xs-4">
-            <label>{t('app_setting:host')}</label>
+            <label>{t('admin:app_setting.host')}</label>
             <input
               className="form-control"
               type="text"
@@ -64,7 +64,7 @@ class MailSetting extends React.Component {
             />
           </div>
           <div className="col-xs-2">
-            <label>{t('app_setting:port')}</label>
+            <label>{t('admin:app_setting.port')}</label>
             <input
               className="form-control"
               defaultValue={adminAppContainer.state.smtpPort}
@@ -75,7 +75,7 @@ class MailSetting extends React.Component {
 
         <div className="row mb-5">
           <div className="col-xs-3 col-xs-offset-3">
-            <label>{t('app_setting:user')}</label>
+            <label>{t('admin:app_setting.user')}</label>
             <input
               className="form-control"
               type="text"

+ 2 - 2
src/client/js/components/Admin/App/PluginSetting.jsx

@@ -39,7 +39,7 @@ class PluginSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <p className="well">{t('app_setting:enable_plugin_loading')}</p>
+        <p className="well">{t('admin:app_setting.enable_plugin_loading')}</p>
 
         <div className="row mb-5">
           <div className="col-xs-offset-3 col-xs-6 text-left">
@@ -52,7 +52,7 @@ class PluginSetting extends React.Component {
                   adminAppContainer.changeIsEnabledPlugins(e.target.checked);
                 }}
               />
-              <label htmlFor="isEnabledPlugins">{t('app_setting:load_plugins')}</label>
+              <label htmlFor="isEnabledPlugins">{t('admin:app_setting.load_plugins')}</label>
             </div>
           </div>
         </div>

+ 4 - 4
src/client/js/components/Admin/App/SiteUrlSetting.jsx

@@ -38,8 +38,8 @@ class SiteUrlSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <p className="well">{t('app_setting:site_url_desc')}</p>
-        {!adminAppContainer.state.isSetSiteUrl && (<p className="alert alert-danger"><i className="icon-exclamation"></i> {t('app_setting:site_url_warn')}</p>)}
+        <p className="well">{t('admin:app_setting.site_url_desc')}</p>
+        {!adminAppContainer.state.isSetSiteUrl && (<p className="alert alert-danger"><i className="icon-exclamation"></i> {t('admin:app_setting.site_url_warn')}</p>)}
 
         <div className="row">
           <div className="col-md-12">
@@ -68,14 +68,14 @@ class SiteUrlSetting extends React.Component {
                       />
                       <p className="help-block">
                         {/* eslint-disable-next-line react/no-danger */}
-                        <div dangerouslySetInnerHTML={{ __html: t('app_setting:siteurl_help') }} />
+                        <div dangerouslySetInnerHTML={{ __html: t('admin:app_setting.siteurl_help') }} />
                       </p>
                     </td>
                     <td>
                       <input className="form-control" type="text" value={adminAppContainer.state.envSiteUrl} readOnly />
                       <p className="help-block">
                         {/* eslint-disable-next-line react/no-danger */}
-                        <div dangerouslySetInnerHTML={{ __html: t('app_setting:use_env_var_if_empty', { variable: 'APP_SITE_URL' }) }} />
+                        <div dangerouslySetInnerHTML={{ __html: t('admin:app_setting.use_env_var_if_empty', { variable: 'APP_SITE_URL' }) }} />
                       </p>
                     </td>
                   </tr>

+ 10 - 10
src/client/js/components/Admin/Customize/CustomizeBehaviorSetting.jsx

@@ -42,19 +42,19 @@ class CustomizeBehaviorSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:behavior')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.behavior')}</h2>
         <div className="row">
           <div className="col-xs-6">
             <CustomizeBehaviorOption
               behaviorType="growi"
               isSelected={adminCustomizeContainer.state.currentBehavior === 'growi'}
               onSelected={() => adminCustomizeContainer.switchBehaviorType('growi')}
-              labelHtml={`GROWI Simplified Behavior <small class="text-success">${t('customize_setting:recommended')}</small>`}
+              labelHtml={`GROWI Simplified Behavior <small class="text-success">${t('admin:customize_setting.recommended')}</small>`}
             >
               <ul>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.growi_text1') }} /></li>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.growi_text2') }} /></li>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.growi_text3') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text1') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text2') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.growi_text3') }} /></li>
               </ul>
             </CustomizeBehaviorOption>
           </div>
@@ -67,13 +67,13 @@ class CustomizeBehaviorSetting extends React.Component {
               labelHtml="Crowi Classic Behavior"
             >
               <ul>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.crowi_text1') }} /></li>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.crowi_text2') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text1') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text2') }} /></li>
                 <ul>
-                  <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.crowi_text3') }} /></li>
+                  <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text3') }} /></li>
                 </ul>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.crowi_text4') }} /></li>
-                <li><span dangerouslySetInnerHTML={{ __html: t('customize_setting:behavior_desc.crowi_text5') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text4') }} /></li>
+                <li><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.behavior_desc.crowi_text5') }} /></li>
               </ul>
             </CustomizeBehaviorOption>
           </div>

+ 4 - 4
src/client/js/components/Admin/Customize/CustomizeCssSetting.jsx

@@ -50,10 +50,10 @@ class CustomizeCssSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:custom_css')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.custom_css')}</h2>
         <p className="well">
-          {t('customize_setting:write_css')}<br />
-          {t('customize_setting:reflect_change')}
+          {t('admin:customize_setting.write_css')}<br />
+          {t('admin:customize_setting.reflect_change')}
         </p>
         <div className="form-group">
           <div className="col-xs-12">
@@ -66,7 +66,7 @@ class CustomizeCssSetting extends React.Component {
           <div className="col-xs-12">
             <p className="help-block text-right">
               <i className="fa fa-fw fa-keyboard-o" aria-hidden="true" />
-              {t('customize_setting:ctrl_space')}
+              {t('admin:customize_setting.ctrl_space')}
             </p>
           </div>
         </div>

+ 15 - 15
src/client/js/components/Admin/Customize/CustomizeFunctionSetting.jsx

@@ -41,21 +41,21 @@ class CustomizeBehaviorSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:function')}</h2>
-        <p className="well">{t('customize_setting:function_desc')}</p>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.function')}</h2>
+        <p className="well">{t('admin:customize_setting.function_desc')}</p>
 
         <div className="form-group row">
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <CustomizeFunctionOption
               optionId="isEnabledTimeline"
-              label={t('customize_setting:function_options.timeline')}
+              label={t('admin:customize_setting.function_options.timeline')}
               isChecked={adminCustomizeContainer.state.isEnabledTimeline}
               onChecked={() => { adminCustomizeContainer.switchEnableTimeline() }}
             >
               <p className="help-block">
-                {t('customize_setting:function_options.timeline_desc1')}<br />
-                {t('customize_setting:function_options.timeline_desc2')}<br />
-                {t('customize_setting:function_options.timeline_desc3')}
+                {t('admin:customize_setting.function_options.timeline_desc1')}<br />
+                {t('admin:customize_setting.function_options.timeline_desc2')}<br />
+                {t('admin:customize_setting.function_options.timeline_desc3')}
               </p>
             </CustomizeFunctionOption>
           </div>
@@ -65,13 +65,13 @@ class CustomizeBehaviorSetting extends React.Component {
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <CustomizeFunctionOption
               optionId="isSavedStatesOfTabChanges"
-              label={t('customize_setting:function_options.tab_switch')}
+              label={t('admin:customize_setting.function_options.tab_switch')}
               isChecked={adminCustomizeContainer.state.isSavedStatesOfTabChanges}
               onChecked={() => { adminCustomizeContainer.switchSavedStatesOfTabChanges() }}
             >
               <p className="help-block">
-                {t('customize_setting:function_options.tab_switch_desc1')}<br />
-                {t('customize_setting:function_options.tab_switch_desc2')}
+                {t('admin:customize_setting.function_options.tab_switch_desc1')}<br />
+                {t('admin:customize_setting.function_options.tab_switch_desc2')}
               </p>
             </CustomizeFunctionOption>
           </div>
@@ -81,12 +81,12 @@ class CustomizeBehaviorSetting extends React.Component {
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <CustomizeFunctionOption
               optionId="isEnabledAttachTitleHeader"
-              label={t('customize_setting:function_options.attach_title_header')}
+              label={t('admin:customize_setting.function_options.attach_title_header')}
               isChecked={adminCustomizeContainer.state.isEnabledAttachTitleHeader}
               onChecked={() => { adminCustomizeContainer.switchEnabledAttachTitleHeader() }}
             >
               <p className="help-block">
-                {t('customize_setting:function_options.attach_title_header_desc')}
+                {t('admin:customize_setting.function_options.attach_title_header_desc')}
               </p>
             </CustomizeFunctionOption>
           </div>
@@ -95,7 +95,7 @@ class CustomizeBehaviorSetting extends React.Component {
         <div className="form-group row">
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <div className="my-0 btn-group">
-              <label>{t('customize_setting:function_options.recent_created__n_draft_num_desc')}</label>
+              <label>{t('admin:customize_setting.function_options.recent_created__n_draft_num_desc')}</label>
               <div className="dropdown">
                 <button className="btn btn-default dropdown-toggle w-100" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                   <span className="pull-left">{adminCustomizeContainer.state.currentRecentCreatedLimit}</span>
@@ -117,7 +117,7 @@ class CustomizeBehaviorSetting extends React.Component {
                 </ul>
               </div>
               <p className="help-block">
-                {t('customize_setting:function_options.recently_created_n_draft_num_desc')}
+                {t('admin:customize_setting.function_options.recently_created_n_draft_num_desc')}
               </p>
             </div>
           </div>
@@ -127,12 +127,12 @@ class CustomizeBehaviorSetting extends React.Component {
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <CustomizeFunctionOption
               optionId="isEnabledStaleNotification"
-              label={t('customize_setting:function_options.stale_notification')}
+              label={t('admin:customize_setting.function_options.stale_notification')}
               isChecked={adminCustomizeContainer.state.isEnabledStaleNotification}
               onChecked={() => { adminCustomizeContainer.switchEnableStaleNotification() }}
             >
               <p className="help-block">
-                {t('customize_setting:function_options.stale_notification_desc')}
+                {t('admin:customize_setting.function_options.stale_notification_desc')}
               </p>
             </CustomizeFunctionOption>
           </div>

+ 3 - 3
src/client/js/components/Admin/Customize/CustomizeHeaderSetting.jsx

@@ -50,12 +50,12 @@ class CustomizeHeaderSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:custom_header')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.custom_header')}</h2>
 
         <p
           className="well"
           // eslint-disable-next-line react/no-danger
-          dangerouslySetInnerHTML={{ __html: t('customize_setting:custom_header_detail') }}
+          dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.custom_header_detail') }}
         />
 
         <div className="help-block">
@@ -76,7 +76,7 @@ class CustomizeHeaderSetting extends React.Component {
         <div className="col-xs-12">
           <p className="help-block text-right">
             <i className="fa fa-fw fa-keyboard-o" aria-hidden="true"></i>
-            {t('customize_setting:ctrl_space')}
+            {t('admin:customize_setting.ctrl_space')}
           </p>
         </div>
 

+ 3 - 3
src/client/js/components/Admin/Customize/CustomizeHighlightSetting.jsx

@@ -72,12 +72,12 @@ class CustomizeHighlightSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:code_highlight')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.code_highlight')}</h2>
 
         <div className="form-group row">
           <div className="col-xs-offset-3 col-xs-6 text-left">
             <div className="my-0 btn-group">
-              <label>{t('customize_setting:theme')}</label>
+              <label>{t('admin:customize_setting.theme')}</label>
               <div className="dropdown">
                 <button className="btn btn-default dropdown-toggle w-100" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                   <span className="pull-left">{adminCustomizeContainer.state.currentHighlightJsStyleName}</span>
@@ -91,7 +91,7 @@ class CustomizeHighlightSetting extends React.Component {
                 </ul>
               </div>
               {/* eslint-disable-next-line react/no-danger */}
-              <p className="help-block text-warning"><span dangerouslySetInnerHTML={{ __html: t('customize_setting:nocdn_desc') }} /></p>
+              <p className="help-block text-warning"><span dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.nocdn_desc') }} /></p>
             </div>
           </div>
         </div>

+ 13 - 13
src/client/js/components/Admin/Customize/CustomizeLayoutOptions.jsx

@@ -20,13 +20,13 @@ class CustomizeLayoutOptions extends React.Component {
             layoutType="crowi-plus"
             isSelected={adminCustomizeContainer.state.currentLayout === 'growi'}
             onSelected={() => adminCustomizeContainer.switchLayoutType('growi')}
-            labelHtml={`GROWI Enhanced Layout <small class="text-success">${t('customize_setting:recommended')}</small>`}
+            labelHtml={`GROWI Enhanced Layout <small class="text-success">${t('admin:customize_setting.recommended')}</small>`}
           >
-            <h4>{t('customize_setting:layout_desc.growi_title')}</h4>
+            <h4>{t('admin:customize_setting.layout_desc.growi_title')}</h4>
             <ul>
-              <li>{t('customize_setting:layout_desc.growi_text1')}</li>
-              <li>{t('customize_setting:layout_desc.growi_text2')}</li>
-              <li>{t('customize_setting:layout_desc.growi_text3')}</li>
+              <li>{t('admin:customize_setting.layout_desc.growi_text1')}</li>
+              <li>{t('admin:customize_setting.layout_desc.growi_text2')}</li>
+              <li>{t('admin:customize_setting.layout_desc.growi_text3')}</li>
             </ul>
           </CustomizeLayoutOption>
         </div>
@@ -38,11 +38,11 @@ class CustomizeLayoutOptions extends React.Component {
             onSelected={() => adminCustomizeContainer.switchLayoutType('kibela')}
             labelHtml="Kibela Like Layout"
           >
-            <h4>{t('customize_setting:layout_desc.kibela_title')}</h4>
+            <h4>{t('admin:customize_setting.layout_desc.kibela_title')}</h4>
             <ul>
-              <li>{t('customize_setting:layout_desc.kibela_text1')}</li>
-              <li>{t('customize_setting:layout_desc.kibela_text2')}</li>
-              <li>{t('customize_setting:layout_desc.kibela_text3')}</li>
+              <li>{t('admin:customize_setting.layout_desc.kibela_text1')}</li>
+              <li>{t('admin:customize_setting.layout_desc.kibela_text2')}</li>
+              <li>{t('admin:customize_setting.layout_desc.kibela_text3')}</li>
             </ul>
           </CustomizeLayoutOption>
         </div>
@@ -54,11 +54,11 @@ class CustomizeLayoutOptions extends React.Component {
             onSelected={() => adminCustomizeContainer.switchLayoutType('crowi')}
             labelHtml="Crowi Classic Layout"
           >
-            <h4>{t('customize_setting:layout_desc.crowi_title')}</h4>
+            <h4>{t('admin:customize_setting.layout_desc.crowi_title')}</h4>
             <ul>
-              <li>{t('customize_setting:layout_desc.crowi_text1')}</li>
-              <li>{t('customize_setting:layout_desc.crowi_text2')}</li>
-              <li>{t('customize_setting:layout_desc.crowi_text3')}</li>
+              <li>{t('admin:customize_setting.layout_desc.crowi_text1')}</li>
+              <li>{t('admin:customize_setting.layout_desc.crowi_text2')}</li>
+              <li>{t('admin:customize_setting.layout_desc.crowi_text3')}</li>
             </ul>
           </CustomizeLayoutOption>
         </div>

+ 2 - 2
src/client/js/components/Admin/Customize/CustomizeLayoutSetting.jsx

@@ -54,9 +54,9 @@ class CustomizeLayoutSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:layout')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.layout')}</h2>
         <CustomizeLayoutOptions />
-        <h2 className="admin-setting-header">{t('customize_setting:theme')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.theme')}</h2>
         {this.renderDevAlert()}
         <CustomizeThemeOptions />
         <AdminUpdateButtonRow onClick={this.onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />

+ 4 - 4
src/client/js/components/Admin/Customize/CustomizeScriptSetting.jsx

@@ -58,10 +58,10 @@ class CustomizeScriptSetting extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:custom_script')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.custom_script')}</h2>
         <p className="well">
-          {t('customize_setting:write_java')}<br />
-          {t('customize_setting:reflect_change')}
+          {t('admin:customize_setting.write_java')}<br />
+          {t('admin:customize_setting.reflect_change')}
         </p>
 
         <div className="help-block">
@@ -97,7 +97,7 @@ class CustomizeScriptSetting extends React.Component {
           <div className="col-xs-12">
             <p className="help-block text-right">
               <i className="fa fa-fw fa-keyboard-o" aria-hidden="true" />
-              {t('customize_setting:ctrl_space')}
+              {t('admin:customize_setting.ctrl_space')}
             </p>
           </div>
         </div>

+ 2 - 2
src/client/js/components/Admin/Customize/CustomizeTitle.jsx

@@ -39,11 +39,11 @@ class CustomizeTitle extends React.Component {
 
     return (
       <React.Fragment>
-        <h2 className="admin-setting-header">{t('customize_setting:custom_title')}</h2>
+        <h2 className="admin-setting-header">{t('admin:customize_setting.custom_title')}</h2>
         <p
           className="well"
           // eslint-disable-next-line react/no-danger, max-len
-          dangerouslySetInnerHTML={{ __html: t('customize_setting:custom_title_detail') }}
+          dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.custom_title_detail') }}
         />
         {/* TODO i18n */}
         <div className="help-block">

+ 4 - 6
src/client/js/components/Admin/ExportArchiveData/ArchiveFilesTable.jsx

@@ -5,24 +5,22 @@ import { format } from 'date-fns';
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import AppContainer from '../../../services/AppContainer';
-// import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 import ArchiveFilesTableMenu from './ArchiveFilesTableMenu';
 
 class ArchiveFilesTable extends React.Component {
 
   render() {
-    // eslint-disable-next-line no-unused-vars
     const { t } = this.props;
 
     return (
       <table className="table table-bordered">
         <thead>
           <tr>
-            <th>{t('export_management:file')}</th>
-            <th>{t('export_management:growi_version')}</th>
-            <th>{t('export_management:collections')}</th>
-            <th>{t('export_management:exported_at')}</th>
+            <th>{t('admin:export_management.file')}</th>
+            <th>{t('admin:export_management.growi_version')}</th>
+            <th>{t('admin:export_management.collections')}</th>
+            <th>{t('admin:export_management.exported_at')}</th>
             <th></th>
           </tr>
         </thead>

+ 3 - 3
src/client/js/components/Admin/ExportArchiveData/ArchiveFilesTableMenu.jsx

@@ -17,15 +17,15 @@ class ArchiveFilesTableMenu extends React.Component {
           <i className="icon-settings"></i> <span className="caret"></span>
         </button>
         <ul className="dropdown-menu" role="menu">
-          <li className="dropdown-header">{t('export_management:export_menu')}</li>
+          <li className="dropdown-header">{t('admin:export_management.export_menu')}</li>
           <li>
             <a type="button" href={`/admin/export/${this.props.fileName}`}>
-              <i className="icon-cloud-download" /> {t('export_management:download')}
+              <i className="icon-cloud-download" /> {t('admin:export_management.download')}
             </a>
           </li>
           <li>
             <a type="button" role="button" onClick={() => this.props.onZipFileStatRemove(this.props.fileName)}>
-              <span className="text-danger"><i className="icon-trash" /> {t('export_management:delete')}</span>
+              <span className="text-danger"><i className="icon-trash" /> {t('admin:export_management.delete')}</span>
             </a>
           </li>
         </ul>

+ 6 - 6
src/client/js/components/Admin/ExportArchiveData/SelectCollectionsModal.jsx

@@ -117,7 +117,7 @@ class SelectCollectionsModal extends React.Component {
       return <></>;
     }
 
-    const html = this.props.t('export_management:desc_password_seed');
+    const html = this.props.t('admin:export_management.desc_password_seed');
 
     // eslint-disable-next-line react/no-danger
     return <div className="well well-sm" dangerouslySetInnerHTML={{ __html: html }}></div>;
@@ -172,7 +172,7 @@ class SelectCollectionsModal extends React.Component {
     return (
       <Modal show={this.props.isOpen} onHide={this.props.onClose}>
         <Modal.Header closeButton>
-          <Modal.Title>{t('export_management:export_collections')}</Modal.Title>
+          <Modal.Title>{t('admin:export_management.export_collections')}</Modal.Title>
         </Modal.Header>
 
         <form onSubmit={this.export}>
@@ -180,10 +180,10 @@ class SelectCollectionsModal extends React.Component {
             <div className="row">
               <div className="col-sm-12">
                 <button type="button" className="btn btn-sm btn-default mr-2" onClick={this.checkAll}>
-                  <i className="fa fa-check-square-o"></i> {t('export_management:check_all')}
+                  <i className="fa fa-check-square-o"></i> {t('admin:export_management.check_all')}
                 </button>
                 <button type="button" className="btn btn-sm btn-default mr-2" onClick={this.uncheckAll}>
-                  <i className="fa fa-square-o"></i> {t('export_management:uncheck_all')}
+                  <i className="fa fa-square-o"></i> {t('admin:export_management.uncheck_all')}
                 </button>
               </div>
             </div>
@@ -215,8 +215,8 @@ class SelectCollectionsModal extends React.Component {
           </Modal.Body>
 
           <Modal.Footer>
-            <button type="button" className="btn btn-sm btn-default" onClick={this.props.onClose}>{t('export_management:cancel')}</button>
-            <button type="submit" className="btn btn-sm btn-primary" disabled={!this.validateForm()}>{t('export_management:export')}</button>
+            <button type="button" className="btn btn-sm btn-default" onClick={this.props.onClose}>{t('admin:export_management.cancel')}</button>
+            <button type="submit" className="btn btn-sm btn-primary" disabled={!this.validateForm()}>{t('admin:export_management.export')}</button>
           </Modal.Footer>
         </form>
       </Modal>

+ 3 - 3
src/client/js/components/Admin/ExportArchiveDataPage.jsx

@@ -214,19 +214,19 @@ class ExportArchiveDataPage extends React.Component {
         <h2>{t('Export Archive Data')}</h2>
 
         <button type="button" className="btn btn-default" disabled={isExporting} onClick={this.openExportModal}>
-          {t('export_management:create_new_archive_data')}
+          {t('admin:export_management.create_new_archive_data')}
         </button>
 
         { showExportingData && (
           <div className="mt-5">
-            <h3>{t('export_management:exporting_collection_list')}</h3>
+            <h3>{t('admin:export_management.exporting_collection_list')}</h3>
             { this.renderProgressBarsForCollections() }
             { this.renderProgressBarForZipping() }
           </div>
         ) }
 
         <div className="mt-5">
-          <h3>{t('export_management:exported_data_list')}</h3>
+          <h3>{t('admin:export_management.exported_data_list')}</h3>
           <ArchiveFilesTable
             zipFileStats={this.state.zipFileStats}
             onZipFileStatRemove={this.onZipFileStatRemove}

+ 2 - 2
src/client/js/components/Admin/ImportData/GrowiArchive/ImportCollectionConfigurationModal.jsx

@@ -57,7 +57,7 @@ class ImportCollectionConfigurationModal extends React.Component {
     const { t } = this.props;
     const { option } = this.state;
 
-    const translationBase = 'importer_management:growi_settings.configuration.pages';
+    const translationBase = 'admin:importer_management.growi_settings.configuration.pages';
 
     /* eslint-disable react/no-unescaped-entities */
     return (
@@ -149,7 +149,7 @@ class ImportCollectionConfigurationModal extends React.Component {
     const { t } = this.props;
     const { option } = this.state;
 
-    const translationBase = 'importer_management:growi_settings.configuration.revisions';
+    const translationBase = 'admin:importer_management.growi_settings.configuration.revisions';
 
     /* eslint-disable react/no-unescaped-entities */
     return (

+ 10 - 10
src/client/js/components/Admin/ImportData/GrowiArchive/ImportForm.jsx

@@ -222,7 +222,7 @@ class ImportForm extends React.Component {
     const { warnForOtherGroups, selectedCollections } = this.state;
 
     if (selectedCollections.size === 0) {
-      warnForOtherGroups.push(t('importer_management:growi_settings.errors.at_least_one'));
+      warnForOtherGroups.push(t('admin:importer_management.growi_settings.errors.at_least_one'));
     }
 
     this.setState({ warnForOtherGroups });
@@ -238,7 +238,7 @@ class ImportForm extends React.Component {
 
     // MUST be included both or neither when importing
     if (pageRelatedCollectionsLength !== 0 && pageRelatedCollectionsLength !== 2) {
-      warnForPageGroups.push(t('importer_management:growi_settings.errors.page_and_revision'));
+      warnForPageGroups.push(t('admin:importer_management.growi_settings.errors.page_and_revision'));
     }
 
     this.setState({ warnForPageGroups });
@@ -251,7 +251,7 @@ class ImportForm extends React.Component {
     // MUST include also 'users' if 'externalaccounts' is selected
     if (selectedCollections.has('externalaccounts')) {
       if (!selectedCollections.has('users')) {
-        warnForUserGroups.push(t('importer_management:growi_settings.errors.depends', { target: 'Users', condition: 'Externalaccounts' }));
+        warnForUserGroups.push(t('admin:importer_management.growi_settings.errors.depends', { target: 'Users', condition: 'Externalaccounts' }));
       }
     }
 
@@ -265,7 +265,7 @@ class ImportForm extends React.Component {
     // MUST include also 'users' if 'usergroups' is selected
     if (selectedCollections.has('usergroups')) {
       if (!selectedCollections.has('users')) {
-        warnForUserGroups.push(t('importer_management:growi_settings.errors.depends', { target: 'Users', condition: 'Usergroups' }));
+        warnForUserGroups.push(t('admin:importer_management.growi_settings.errors.depends', { target: 'Users', condition: 'Usergroups' }));
       }
     }
 
@@ -279,7 +279,7 @@ class ImportForm extends React.Component {
     // MUST include also 'usergroups' if 'usergrouprelations' is selected
     if (selectedCollections.has('usergrouprelations')) {
       if (!selectedCollections.has('usergroups')) {
-        warnForUserGroups.push(t('importer_management:growi_settings.errors.depends', { target: 'Usergroups', condition: 'Usergrouprelations' }));
+        warnForUserGroups.push(t('admin:importer_management.growi_settings.errors.depends', { target: 'Usergroups', condition: 'Usergrouprelations' }));
       }
     }
 
@@ -454,27 +454,27 @@ class ImportForm extends React.Component {
         <form className="form-inline">
           <div className="form-group">
             <button type="button" className="btn btn-sm btn-default mr-2" onClick={this.checkAll}>
-              <i className="fa fa-check-square-o"></i> {t('export_management:check_all')}
+              <i className="fa fa-check-square-o"></i> {t('admin:export_management.check_all')}
             </button>
           </div>
           <div className="form-group">
             <button type="button" className="btn btn-sm btn-default mr-2" onClick={this.uncheckAll}>
-              <i className="fa fa-square-o"></i> {t('export_management:uncheck_all')}
+              <i className="fa fa-square-o"></i> {t('admin:export_management.uncheck_all')}
             </button>
           </div>
         </form>
 
-        {this.renderGroups(GROUPS_PAGE, 'Page', warnForPageGroups, { wellContent: t('importer_management:growi_settings.overwrite_documents') })}
+        {this.renderGroups(GROUPS_PAGE, 'Page', warnForPageGroups, { wellContent: t('admin:importer_management.growi_settings.overwrite_documents') })}
         {this.renderGroups(GROUPS_USER, 'User', warnForUserGroups)}
         {this.renderGroups(GROUPS_CONFIG, 'Config', warnForConfigGroups)}
         {this.renderOthers()}
 
         <div className="mt-4 text-center">
           <button type="button" className="btn btn-default mx-1" onClick={this.props.onDiscard}>
-            {t('importer_management:growi_settings.discard')}
+            {t('admin:importer_management.growi_settings.discard')}
           </button>
           <button type="button" className="btn btn-primary mx-1" onClick={this.import} disabled={!canImport || isImporting}>
-            {t('importer_management:import')}
+            {t('admin:importer_management.import')}
           </button>
         </div>
 

+ 2 - 2
src/client/js/components/Admin/ImportData/GrowiArchive/UploadForm.jsx

@@ -51,7 +51,7 @@ class UploadForm extends React.Component {
       <form className="form-horizontal" onSubmit={this.uploadZipFile}>
         <fieldset>
           <div className="form-group">
-            <label htmlFor="file" className="col-xs-3 control-label">{t('importer_management:growi_settings.growi_archive_file')}</label>
+            <label htmlFor="file" className="col-xs-3 control-label">{t('admin:importer_management.growi_settings.growi_archive_file')}</label>
             <div className="col-xs-6">
               <input
                 type="file"
@@ -66,7 +66,7 @@ class UploadForm extends React.Component {
           <div className="form-group">
             <div className="col-xs-offset-3 col-xs-6">
               <button type="submit" className="btn btn-primary" disabled={!this.validateForm()}>
-                {t('importer_management:growi_settings.upload')}
+                {t('admin:importer_management.growi_settings.upload')}
               </button>
             </div>
           </div>

+ 1 - 1
src/client/js/components/Admin/ImportData/GrowiArchiveSection.jsx

@@ -83,7 +83,7 @@ class GrowiArchiveSection extends React.Component {
 
     return (
       <Fragment>
-        <h2>{t('importer_management:import_growi_archive')}</h2>
+        <h2>{t('admin:importer_management.import_growi_archive')}</h2>
 
         {this.state.fileName != null ? (
           <div className="px-4">

+ 13 - 13
src/client/js/components/Admin/ImportDataPage.jsx

@@ -143,7 +143,7 @@ class ImportDataPage extends React.Component {
           role="form"
         >
           <fieldset>
-            <legend>{t('importer_management:import_from', { from: 'esa.io' })}</legend>
+            <legend>{t('admin:importer_management.import_from', { from: 'esa.io' })}</legend>
             <table className="table table-bordered table-mapping">
               <thead>
                 <tr>
@@ -173,7 +173,7 @@ class ImportDataPage extends React.Component {
 
             <div className="well well-sm mb-0 small">
               <ul>
-                <li>{t('importer_management:page_skip')}</li>
+                <li>{t('admin:importer_management.page_skip')}</li>
               </ul>
             </div>
 
@@ -183,7 +183,7 @@ class ImportDataPage extends React.Component {
 
             <div className="form-group">
               <label htmlFor="settingForm[importer:esa:team_name]" className="col-xs-3 control-label">
-                {t('importer_management:esa_settings.team_name')}
+                {t('admin:importer_management.esa_settings.team_name')}
               </label>
               <div className="col-xs-6">
                 <input className="form-control" type="text" name="esaTeamName" value={esaTeamName} onChange={this.handleInputValue} />
@@ -193,7 +193,7 @@ class ImportDataPage extends React.Component {
 
             <div className="form-group">
               <label htmlFor="settingForm[importer:esa:access_token]" className="col-xs-3 control-label">
-                {t('importer_management:esa_settings.access_token')}
+                {t('admin:importer_management.esa_settings.access_token')}
               </label>
               <div className="col-xs-6">
                 <input className="form-control" type="password" name="esaAccessToken" value={esaAccessToken} onChange={this.handleInputValue} />
@@ -208,7 +208,7 @@ class ImportDataPage extends React.Component {
                   className="btn btn-primary btn-esa"
                   name="Esa"
                   onClick={this.esaHandleSubmit}
-                  value={t('importer_management:import')}
+                  value={t('admin:importer_management.import')}
                 />
                 <input type="button" className="btn btn-secondary" onClick={this.esaHandleSubmitUpdate} value={t('Update')} />
                 <span className="col-xs-offset-1">
@@ -218,7 +218,7 @@ class ImportDataPage extends React.Component {
                     id="importFromEsa"
                     className="btn btn-default btn-esa"
                     onClick={this.esaHandleSubmitTest}
-                    value={t('importer_management:esa_settings.test_connection')}
+                    value={t('admin:importer_management.esa_settings.test_connection')}
                   />
                 </span>
 
@@ -233,7 +233,7 @@ class ImportDataPage extends React.Component {
           role="form"
         >
           <fieldset>
-            <legend>{t('importer_management:import_from', { from: 'Qiita:Team' })}</legend>
+            <legend>{t('admin:importer_management.import_from', { from: 'Qiita:Team' })}</legend>
             <table className="table table-bordered table-mapping">
               <thead>
                 <tr>
@@ -254,7 +254,7 @@ class ImportDataPage extends React.Component {
                   <th>-</th>
                 </tr>
                 <tr>
-                  <th>{t('importer_management:Directory_hierarchy_tag')}</th>
+                  <th>{t('admin:importer_management.Directory_hierarchy_tag')}</th>
                   <th></th>
                   <th>(TBD)</th>
                 </tr>
@@ -267,7 +267,7 @@ class ImportDataPage extends React.Component {
             </table>
             <div className="well well-sm mb-0 small">
               <ul>
-                <li>{t('importer_management:page_skip')}</li>
+                <li>{t('admin:importer_management.page_skip')}</li>
               </ul>
             </div>
 
@@ -276,7 +276,7 @@ class ImportDataPage extends React.Component {
             </div>
             <div className="form-group">
               <label htmlFor="settingForm[importer:qiita:team_name]" className="col-xs-3 control-label">
-                {t('importer_management:qiita_settings.team_name')}
+                {t('admin:importer_management.qiita_settings.team_name')}
               </label>
               <div className="col-xs-6">
                 <input className="form-control" type="text" name="qiitaTeamName" value={qiitaTeamName} onChange={this.handleInputValue} />
@@ -285,7 +285,7 @@ class ImportDataPage extends React.Component {
 
             <div className="form-group">
               <label htmlFor="settingForm[importer:qiita:access_token]" className="col-xs-3 control-label">
-                {t('importer_management:qiita_settings.access_token')}
+                {t('admin:importer_management.qiita_settings.access_token')}
               </label>
               <div className="col-xs-6">
                 <input className="form-control" type="password" name="qiitaAccessToken" value={qiitaAccessToken} onChange={this.handleInputValue} />
@@ -301,7 +301,7 @@ class ImportDataPage extends React.Component {
                   className="btn btn-primary btn-qiita"
                   name="Qiita"
                   onClick={this.qiitaHandleSubmit}
-                  value={t('importer_management:import')}
+                  value={t('admin:importer_management.import')}
                 />
                 <input type="button" className="btn btn-secondary" onClick={this.qiitaHandleSubmitUpdate} value={t('Update')} />
                 <span className="col-xs-offset-1">
@@ -311,7 +311,7 @@ class ImportDataPage extends React.Component {
                     id="importFromQiita"
                     className="btn btn-default btn-qiita"
                     onClick={this.qiitaHandleSubmitTest}
-                    value={t('importer_management:qiita_settings.test_connection')}
+                    value={t('admin:importer_management.qiita_settings.test_connection')}
                   />
                 </span>
 

+ 2 - 2
src/client/js/components/Admin/ManageExternalAccount.jsx

@@ -50,11 +50,11 @@ class ManageExternalAccount extends React.Component {
         <p>
           <a className="btn btn-default" href="/admin/users">
             <i className="icon-fw ti-arrow-left" aria-hidden="true"></i>
-            {t('user_management:back_to_user_management')}
+            {t('admin:user_management.back_to_user_management')}
           </a>
         </p>
 
-        <h2>{t('user_management:external_account_list')}</h2>
+        <h2>{t('admin:user_management.external_account_list')}</h2>
 
         {pager}
         <ExternalAccountTable />

+ 4 - 4
src/client/js/components/Admin/MarkdownSetting/LineBreakForm.jsx

@@ -38,7 +38,7 @@ class LineBreakForm extends React.Component {
     const { t, adminMarkDownContainer } = this.props;
     const { isEnabledLinebreaks } = adminMarkDownContainer.state;
 
-    const helpLineBreak = { __html: t('markdown_setting:lineBreak_options.enable_lineBreak_desc') };
+    const helpLineBreak = { __html: t('admin:markdown_setting.lineBreak_options.enable_lineBreak_desc') };
 
     return (
       <div className="form-group row">
@@ -51,7 +51,7 @@ class LineBreakForm extends React.Component {
               onChange={() => { adminMarkDownContainer.setState({ isEnabledLinebreaks: !isEnabledLinebreaks }) }}
             />
             <label htmlFor="isEnabledLinebreaks">
-              {t('markdown_setting:lineBreak_options.enable_lineBreak')}
+              {t('admin:markdown_setting.lineBreak_options.enable_lineBreak')}
             </label>
           </div>
           <p className="help-block" dangerouslySetInnerHTML={helpLineBreak} />
@@ -64,7 +64,7 @@ class LineBreakForm extends React.Component {
     const { t, adminMarkDownContainer } = this.props;
     const { isEnabledLinebreaksInComments } = adminMarkDownContainer.state;
 
-    const helpLineBreakInComment = { __html: t('markdown_setting:lineBreak_options.enable_lineBreak_for_comment_desc') };
+    const helpLineBreakInComment = { __html: t('admin:markdown_setting.lineBreak_options.enable_lineBreak_for_comment_desc') };
 
     return (
       <div className="form-group row">
@@ -77,7 +77,7 @@ class LineBreakForm extends React.Component {
               onChange={() => { adminMarkDownContainer.setState({ isEnabledLinebreaksInComments: !isEnabledLinebreaksInComments }) }}
             />
             <label htmlFor="isEnabledLinebreaksInComments">
-              {t('markdown_setting:lineBreak_options.enable_lineBreak')}
+              {t('admin:markdown_setting.lineBreak_options.enable_lineBreak')}
             </label>
           </div>
           <p className="help-block" dangerouslySetInnerHTML={helpLineBreakInComment} />

+ 6 - 6
src/client/js/components/Admin/MarkdownSetting/MarkDownSetting.jsx

@@ -38,22 +38,22 @@ class MarkdownSetting extends React.Component {
       <React.Fragment>
         {/* Line Break Setting */}
         <div className="row mb-5">
-          <h2 className="border-bottom">{t('markdown_setting:lineBreak_header')}</h2>
-          <p className="well">{t('markdown_setting:lineBreak_desc')}</p>
+          <h2 className="border-bottom">{t('admin:markdown_setting.lineBreak_header')}</h2>
+          <p className="well">{t('admin:markdown_setting.lineBreak_desc')}</p>
           <LineBreakForm />
         </div>
 
         {/* Presentation Setting */}
         <div className="row mb-5">
-          <h2 className="border-bottom">{t('markdown_setting:presentation_header')}</h2>
-          <p className="well">{t('markdown_setting:presentation_desc')}</p>
+          <h2 className="border-bottom">{t('admin:markdown_setting.presentation_header')}</h2>
+          <p className="well">{t('admin:markdown_setting.presentation_desc')}</p>
           <PresentationForm />
         </div>
 
         {/* XSS Setting */}
         <div className="row mb-5">
-          <h2 className="border-bottom">{t('markdown_setting:xss_header')}</h2>
-          <p className="well">{t('markdown_setting:xss_desc')}</p>
+          <h2 className="border-bottom">{t('admin:markdown_setting.xss_header')}</h2>
+          <p className="well">{t('admin:markdown_setting.xss_desc')}</p>
           <XssForm />
         </div>
       </React.Fragment>

+ 9 - 9
src/client/js/components/Admin/MarkdownSetting/PresentationForm.jsx

@@ -41,7 +41,7 @@ class PresentationForm extends React.Component {
       <fieldset className="form-group row my-2">
 
         <label className="col-xs-3 control-label text-right">
-          {t('markdown_setting:presentation_options.page_break_setting')}
+          {t('admin:markdown_setting.presentation_options.page_break_setting')}
         </label>
 
         <div className="col-xs-3 radio radio-primary">
@@ -52,10 +52,10 @@ class PresentationForm extends React.Component {
             onChange={() => adminMarkDownContainer.switchPageBreakSeparator(1)}
           />
           <label htmlFor="pageBreakOption1">
-            <p className="font-weight-bold">{t('markdown_setting:presentation_options.preset_one_separator')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.presentation_options.preset_one_separator')}</p>
             <div className="mt-3">
-              {t('markdown_setting:presentation_options.preset_one_separator_desc')}
-              <pre><code>{t('markdown_setting:presentation_options.preset_one_separator_value')}</code></pre>
+              {t('admin:markdown_setting.presentation_options.preset_one_separator_desc')}
+              <pre><code>{t('admin:markdown_setting.presentation_options.preset_one_separator_value')}</code></pre>
             </div>
           </label>
         </div>
@@ -68,10 +68,10 @@ class PresentationForm extends React.Component {
             onChange={() => adminMarkDownContainer.switchPageBreakSeparator(2)}
           />
           <label htmlFor="pageBreakOption2">
-            <p className="font-weight-bold">{t('markdown_setting:presentation_options.preset_two_separator')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.presentation_options.preset_two_separator')}</p>
             <div className="mt-3">
-              {t('markdown_setting:presentation_options.preset_two_separator_desc')}
-              <pre><code>{t('markdown_setting:presentation_options.preset_two_separator_value')}</code></pre>
+              {t('admin:markdown_setting.presentation_options.preset_two_separator_desc')}
+              <pre><code>{t('admin:markdown_setting.presentation_options.preset_two_separator_value')}</code></pre>
             </div>
           </label>
         </div>
@@ -84,9 +84,9 @@ class PresentationForm extends React.Component {
             onChange={() => adminMarkDownContainer.switchPageBreakSeparator(3)}
           />
           <label htmlFor="pageBreakOption3">
-            <p className="font-weight-bold">{t('markdown_setting:presentation_options.custom_separator')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.presentation_options.custom_separator')}</p>
             <div className="mt-3">
-              {t('markdown_setting:presentation_options.custom_separator_desc')}
+              {t('admin:markdown_setting.presentation_options.custom_separator_desc')}
               <input
                 className="form-control"
                 defaultValue={pageBreakCustomSeparator}

+ 4 - 4
src/client/js/components/Admin/MarkdownSetting/WhiteListInput.jsx

@@ -37,9 +37,9 @@ class WhiteListInput extends React.Component {
       <>
         <div className="m-t-15">
           <div className="d-flex justify-content-between">
-            {t('markdown_setting:xss_options.tag_names')}
+            {t('admin:markdown_setting.xss_options.tag_names')}
             <p id="btn-import-tags" className="btn btn-xs btn-primary" onClick={this.onClickRecommendTagButton}>
-              {t('markdown_setting:xss_options.import_recommended', { target: 'Tags' })}
+              {t('admin:markdown_setting.xss_options.import_recommended', { target: 'Tags' })}
             </p>
           </div>
           <textarea
@@ -54,9 +54,9 @@ class WhiteListInput extends React.Component {
         </div>
         <div className="m-t-15">
           <div className="d-flex justify-content-between">
-            {t('markdown_setting:xss_options.tag_attributes')}
+            {t('admin:markdown_setting.xss_options.tag_attributes')}
             <p id="btn-import-tags" className="btn btn-xs btn-primary" onClick={this.onClickRecommendAttrButton}>
-              {t('markdown_setting:xss_options.import_recommended', { target: 'Attrs' })}
+              {t('admin:markdown_setting.xss_options.import_recommended', { target: 'Attrs' })}
             </p>
           </div>
           <textarea

+ 7 - 7
src/client/js/components/Admin/MarkdownSetting/XssForm.jsx

@@ -50,9 +50,9 @@ class XssForm extends React.Component {
             onChange={() => { adminMarkDownContainer.setState({ xssOption: 1 }) }}
           />
           <label htmlFor="xssOption1">
-            <p className="font-weight-bold">{t('markdown_setting:xss_options.ignore_all_tags')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.xss_options.ignore_all_tags')}</p>
             <div className="m-t-15">
-              {t('markdown_setting:xss_options.ignore_all_tags_desc')}
+              {t('admin:markdown_setting.xss_options.ignore_all_tags_desc')}
             </div>
           </label>
         </div>
@@ -66,10 +66,10 @@ class XssForm extends React.Component {
             onChange={() => { adminMarkDownContainer.setState({ xssOption: 2 }) }}
           />
           <label htmlFor="xssOption2">
-            <p className="font-weight-bold">{t('markdown_setting:xss_options.recommended_setting')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.xss_options.recommended_setting')}</p>
             <div className="m-t-15">
               <div className="d-flex justify-content-between">
-                {t('markdown_setting:xss_options.tag_names')}
+                {t('admin:markdown_setting.xss_options.tag_names')}
               </div>
               <textarea
                 className="form-control xss-list"
@@ -82,7 +82,7 @@ class XssForm extends React.Component {
             </div>
             <div className="m-t-15">
               <div className="d-flex justify-content-between">
-                {t('markdown_setting:xss_options.tag_attributes')}
+                {t('admin:markdown_setting.xss_options.tag_attributes')}
               </div>
               <textarea
                 className="form-control xss-list"
@@ -105,7 +105,7 @@ class XssForm extends React.Component {
             onChange={() => { adminMarkDownContainer.setState({ xssOption: 3 }) }}
           />
           <label htmlFor="xssOption3">
-            <p className="font-weight-bold">{t('markdown_setting:xss_options.custom_whitelist')}</p>
+            <p className="font-weight-bold">{t('admin:markdown_setting.xss_options.custom_whitelist')}</p>
             <WhiteListInput />
           </label>
         </div>
@@ -132,7 +132,7 @@ class XssForm extends React.Component {
                   onChange={adminMarkDownContainer.switchEnableXss}
                 />
                 <label htmlFor="XssEnable">
-                  {t('markdown_setting:xss_options.enable_xss_prevention')}
+                  {t('admin:markdown_setting.xss_options.enable_xss_prevention')}
                 </label>
               </div>
             </div>

+ 4 - 4
src/client/js/components/Admin/UserGroup/UserGroupCreateForm.jsx

@@ -71,23 +71,23 @@ class UserGroupCreateForm extends React.Component {
           {this.props.isAclEnabled
             ? (
               <button type="button" data-toggle="collapse" className="btn btn-default" href="#createGroupForm">
-                {t('user_group_management:create_group')}
+                {t('admin:user_group_management.create_group')}
               </button>
             )
             : (
-              t('user_group_management:deny_create_group')
+              t('admin:user_group_management.deny_create_group')
             )
           }
         </p>
         <form onSubmit={this.handleSubmit}>
           <div id="createGroupForm" className="collapse">
             <div className="form-group">
-              <label htmlFor="name">{t('user_group_management:group_name')}</label>
+              <label htmlFor="name">{t('admin:user_group_management.group_name')}</label>
               <textarea
                 id="name"
                 name="name"
                 className="form-control"
-                placeholder={t('user_group_management:group_example')}
+                placeholder={t('admin:user_group_management.group_example')}
                 value={this.state.name}
                 onChange={this.handleChange}
               >

+ 8 - 8
src/client/js/components/Admin/UserGroup/UserGroupDeleteModal.jsx

@@ -34,21 +34,21 @@ class UserGroupDeleteModal extends React.Component {
         actionForPages: this.actionForPages.public,
         iconClass: 'icon-people',
         styleClass: '',
-        label: t('user_group_management:delete_modal.publish_pages'),
+        label: t('admin:user_group_management.delete_modal.publish_pages'),
       },
       {
         id: 2,
         actionForPages: this.actionForPages.delete,
         iconClass: 'icon-trash',
         styleClass: 'text-danger',
-        label: t('user_group_management:delete_modal.delete_pages'),
+        label: t('admin:user_group_management.delete_modal.delete_pages'),
       },
       {
         id: 3,
         actionForPages: this.actionForPages.transfer,
         iconClass: 'icon-options',
         styleClass: '',
-        label: t('user_group_management:delete_modal.transfer_pages'),
+        label: t('admin:user_group_management.delete_modal.transfer_pages'),
       },
     ];
 
@@ -111,7 +111,7 @@ class UserGroupDeleteModal extends React.Component {
         value={this.state.actionName}
         onChange={this.handleActionChange}
       >
-        <option value="" disabled>{t('user_group_management:delete_modal.dropdown_desc')}</option>
+        <option value="" disabled>{t('admin:user_group_management.delete_modal.dropdown_desc')}</option>
         {optoins}
       </select>
     );
@@ -129,7 +129,7 @@ class UserGroupDeleteModal extends React.Component {
       return <option key={group._id} value={group._id} data-content={dataContent}>{this.xss.process(group.name)}</option>;
     });
 
-    const defaultOptionText = groups.length === 0 ? t('user_group_management:delete_modal.no_groups') : t('user_group_management:delete_modal.select_group');
+    const defaultOptionText = groups.length === 0 ? t('admin:user_group_management.delete_modal.no_groups') : t('admin:user_group_management.delete_modal.select_group');
 
     return (
       <select
@@ -164,15 +164,15 @@ class UserGroupDeleteModal extends React.Component {
       <Modal show={this.props.isShow} onHide={this.onHide}>
         <Modal.Header className="modal-header bg-danger" closeButton>
           <Modal.Title>
-            <i className="icon icon-fire"></i> {t('user_group_management:delete_modal.header')}
+            <i className="icon icon-fire"></i> {t('admin:user_group_management.delete_modal.header')}
           </Modal.Title>
         </Modal.Header>
         <Modal.Body>
           <div>
-            <span className="font-weight-bold">{t('user_group_management:group_name')}</span> : &quot;{this.props.deleteUserGroup.name}&quot;
+            <span className="font-weight-bold">{t('admin:user_group_management.group_name')}</span> : &quot;{this.props.deleteUserGroup.name}&quot;
           </div>
           <div className="text-danger mt-5">
-            {t('user_group_management:delete_modal.desc')}
+            {t('admin:user_group_management.delete_modal.desc')}
           </div>
         </Modal.Body>
         <Modal.Footer>

+ 1 - 1
src/client/js/components/Admin/UserGroup/UserGroupTable.jsx

@@ -43,7 +43,7 @@ class UserGroupTable extends React.Component {
 
     return (
       <Fragment>
-        <h2>{t('user_group_management:group_list')}</h2>
+        <h2>{t('admin:user_group_management.group_list')}</h2>
 
         <table className="table table-bordered table-user-list">
           <thead>

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/CheckBoxForSerchUserOption.jsx

@@ -17,7 +17,7 @@ class CheckBoxForSerchUserOption extends React.Component {
           onChange={this.props.onChange}
         />
         <label className="text-capitalize form-check-label ml-3" htmlFor={`isAlso${option}Searched`}>
-          {t('user_group_management:add_modal.enable_option', { option })}
+          {t('admin:user_group_management.add_modal.enable_option', { option })}
         </label>
       </div>
     );

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/RadioButtonForSerchUserOption.jsx

@@ -17,7 +17,7 @@ class RadioButtonForSerchUserOption extends React.Component {
           onChange={this.props.onChange}
         />
         <label className="text-capitalize form-check-label ml-3" htmlFor={`${searchType}Match`}>
-          {t(`user_group_management:add_modal.${searchType}_match`)}
+          {t(`admin:user_group_management.add_modal.${searchType}_match`)}
         </label>
       </div>
     );

+ 2 - 2
src/client/js/components/Admin/UserGroupDetail/UserGroupDetailPage.jsx

@@ -18,12 +18,12 @@ class UserGroupDetailPage extends React.Component {
       <div>
         <a href="/admin/user-groups" className="btn btn-default">
           <i className="icon-fw ti-arrow-left" aria-hidden="true"></i>
-          {t('user_group_management:back_to_list')}
+          {t('admin:user_group_management.back_to_list')}
         </a>
         <div className="m-t-20 form-box">
           <UserGroupEditForm />
         </div>
-        <legend className="m-t-20">{t('user_group_management:user_list')}</legend>
+        <legend className="m-t-20">{t('admin:user_group_management.user_list')}</legend>
         <UserGroupUserTable />
         <UserGroupUserModal />
         <legend className="m-t-20">{t('Page')}</legend>

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/UserGroupEditForm.jsx

@@ -60,7 +60,7 @@ class UserGroupEditForm extends React.Component {
     return (
       <form className="form-horizontal" onSubmit={this.handleSubmit}>
         <fieldset>
-          <legend>{t('user_group_management:basic_info')}</legend>
+          <legend>{t('admin:user_group_management.basic_info')}</legend>
           <div className="form-group">
             <label htmlFor="name" className="col-sm-2 control-label">{t('Name')}</label>
             <div className="col-sm-4">

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/UserGroupPageList.jsx

@@ -58,7 +58,7 @@ class UserGroupPageList extends React.Component {
         <ul className="page-list-ul page-list-ul-flat">
           {this.state.currentPages.map((page) => { return <Page key={page._id} page={page} /> })}
         </ul>
-        {userGroupDetailContainer.state.relatedPages.length === 0 ? <p>{t('user_group_management:no_pages')}</p> : null}
+        {userGroupDetailContainer.state.relatedPages.length === 0 ? <p>{t('admin:user_group_management.no_pages')}</p> : null}
         <PaginationWrapper
           activePage={this.state.activePage}
           changePage={this.handlePageChange}

+ 2 - 2
src/client/js/components/Admin/UserGroupDetail/UserGroupUserModal.jsx

@@ -18,13 +18,13 @@ class UserGroupUserModal extends React.Component {
     return (
       <Modal show={userGroupDetailContainer.state.isUserGroupUserModalOpen} onHide={userGroupDetailContainer.closeUserGroupUserModal}>
         <Modal.Header closeButton>
-          <Modal.Title>{t('user_group_management:add_modal.add_user')}</Modal.Title>
+          <Modal.Title>{t('admin:user_group_management.add_modal.add_user')}</Modal.Title>
         </Modal.Header>
         <Modal.Body>
           <div className="p-3">
             <UserGroupUserFormByInput />
           </div>
-          <h2 className="border-bottom">{t('user_group_management:add_modal.search_option')}</h2>
+          <h2 className="border-bottom">{t('admin:user_group_management.add_modal.search_option')}</h2>
           <div className="row mt-4">
             <div className="col-xs-6">
               <div className="mb-5">

+ 1 - 1
src/client/js/components/Admin/UserGroupDetail/UserGroupUserTable.jsx

@@ -70,7 +70,7 @@ class UserGroupUserTable extends React.Component {
                     <ul className="dropdown-menu" role="menu">
                       <li>
                         <a onClick={() => { return this.removeUser(relatedUser.username) }}>
-                          <i className="icon-fw icon-user-unfollow"></i> {t('user_group_management:remove_from_group')}
+                          <i className="icon-fw icon-user-unfollow"></i> {t('admin:user_group_management.remove_from_group')}
                         </a>
                       </li>
                     </ul>

+ 1 - 1
src/client/js/components/Admin/UserManagement.jsx

@@ -57,7 +57,7 @@ class UserManagement extends React.Component {
           <InviteUserControl />
           <a className="btn btn-default btn-outline ml-2" href="/admin/users/external-accounts">
             <i className="icon-user-follow" aria-hidden="true"></i>
-            {t('user_management:external_account')}
+            {t('admin:user_management.external_account')}
           </a>
         </p>
 

+ 7 - 7
src/client/js/components/Admin/Users/ExternalAccountTable.jsx

@@ -41,11 +41,11 @@ class ExternalAccountTable extends React.Component {
         <table className="table table-bordered table-user-list">
           <thead>
             <tr>
-              <th width="120px">{t('user_management:authentication_provider')}</th>
+              <th width="120px">{t('admin:user_management.authentication_provider')}</th>
               <th><code>accountId</code></th>
-              <th>{t('user_management:related_username')}<code>username</code></th>
+              <th>{t('admin:user_management.related_username')}<code>username</code></th>
               <th>
-                {t('user_management:password_setting')}
+                {t('admin:user_management.password_setting')}
                 <div
                   className="text-muted"
                   data-toggle="popover"
@@ -55,7 +55,7 @@ class ExternalAccountTable extends React.Component {
                   role="button"
                   data-animation="false"
                   data-html="true"
-                  data-content={t('user_management:password_setting_help')}
+                  data-content={t('admin:user_management.password_setting_help')}
                 >
                   <small>
                     <i className="icon-question" aria-hidden="true"></i>
@@ -81,12 +81,12 @@ class ExternalAccountTable extends React.Component {
                     {ea.user.password
                       ? (
                         <span className="label label-info">
-                          {t('user_management:set')}
+                          {t('admin:user_management.set')}
                         </span>
                       )
                       : (
                         <span className="label label-warning">
-                          {t('user_management:unset')}
+                          {t('admin:user_management.unset')}
                         </span>
                       )
                     }
@@ -98,7 +98,7 @@ class ExternalAccountTable extends React.Component {
                         <i className="icon-settings"></i> <span className="caret"></span>
                       </button>
                       <ul className="dropdown-menu" role="menu">
-                        <li className="dropdown-header">{t('user_management:user_table.edit_menu')}</li>
+                        <li className="dropdown-header">{t('admin:user_management.user_table.edit_menu')}</li>
                         <li>
                           <a onClick={() => { return this.removeExtenalAccount(ea._id) }}>
                             <i className="icon-fw icon-fire text-danger"></i> {t('Delete')}

+ 1 - 1
src/client/js/components/Admin/Users/GiveAdminButton.jsx

@@ -32,7 +32,7 @@ class GiveAdminButton extends React.Component {
 
     return (
       <a className="px-4" onClick={() => { this.onClickGiveAdminBtn() }}>
-        <i className="icon-fw icon-user-following"></i> {t('user_management:user_table.give_admin_access')}
+        <i className="icon-fw icon-user-following"></i> {t('admin:user_management.user_table.give_admin_access')}
       </a>
     );
   }

+ 1 - 1
src/client/js/components/Admin/Users/InviteUserControl.jsx

@@ -15,7 +15,7 @@ class InviteUserControl extends React.Component {
     return (
       <Fragment>
         <button type="button" className="btn btn-default" onClick={adminUsersContainer.toggleUserInviteModal}>
-          {t('user_management:invite_users')}
+          {t('admin:user_management.invite_users')}
         </button>
         <UserInviteModal />
       </Fragment>

+ 8 - 8
src/client/js/components/Admin/Users/PasswordResetModal.jsx

@@ -41,12 +41,12 @@ class PasswordResetModal extends React.Component {
 
     return (
       <div>
-        <p className="alert alert-danger">{t('user_management:reset_password_modal.password_reset_message')}</p>
+        <p className="alert alert-danger">{t('admin:user_management.reset_password_modal.password_reset_message')}</p>
         <p>
-          {t('user_management:reset_password_modal.target_user')}: <code>{user.email}</code>
+          {t('admin:user_management.reset_password_modal.target_user')}: <code>{user.email}</code>
         </p>
         <p>
-          {t('user_management:reset_password_modal.new_password')}: <code>{this.state.temporaryPassword}</code>
+          {t('admin:user_management.reset_password_modal.new_password')}: <code>{this.state.temporaryPassword}</code>
         </p>
       </div>
     );
@@ -59,14 +59,14 @@ class PasswordResetModal extends React.Component {
     return (
       <div>
         <p>
-          {t('user_management:reset_password_modal.password_never_seen')}<br />
-          <span className="text-danger">{t('user_management:reset_password_modal.send_new_password')}</span>
+          {t('admin:user_management.reset_password_modal.password_never_seen')}<br />
+          <span className="text-danger">{t('admin:user_management.reset_password_modal.send_new_password')}</span>
         </p>
         <p>
-          {t('user_management:reset_password_modal.target_user')}: <code>{user.email}</code>
+          {t('admin:user_management.reset_password_modal.target_user')}: <code>{user.email}</code>
         </p>
         <button type="submit" className="btn btn-primary" onClick={this.resetPassword}>
-          {t('user_management:reset_password')}
+          {t('admin:user_management.reset_password')}
         </button>
       </div>
     );
@@ -88,7 +88,7 @@ class PasswordResetModal extends React.Component {
       <Modal show={adminUsersContainer.state.isPasswordResetModalShown} onHide={adminUsersContainer.hidePasswordResetModal}>
         <Modal.Header className="modal-header" closeButton>
           <Modal.Title>
-            {t('user_management:reset_password')}
+            {t('admin:user_management.reset_password')}
           </Modal.Title>
         </Modal.Header>
         <Modal.Body>

+ 3 - 3
src/client/js/components/Admin/Users/RemoveAdminButton.jsx

@@ -33,7 +33,7 @@ class RemoveAdminButton extends React.Component {
 
     return (
       <a className="px-4" onClick={() => { this.onClickRemoveAdminBtn() }}>
-        <i className="icon-fw icon-user-unfollow"></i> {t('user_management:user_table.remove_admin_access')}
+        <i className="icon-fw icon-user-unfollow"></i> {t('admin:user_management.user_table.remove_admin_access')}
       </a>
     );
   }
@@ -43,8 +43,8 @@ class RemoveAdminButton extends React.Component {
 
     return (
       <div className="px-4">
-        <i className="icon-fw icon-user-unfollow mb-2"></i>{t('user_management:user_table.remove_admin_access')}
-        <p className="alert alert-danger">{t('user_management:user_table.cannot_remove')}</p>
+        <i className="icon-fw icon-user-unfollow mb-2"></i>{t('admin:user_management.user_table.remove_admin_access')}
+        <p className="alert alert-danger">{t('admin:user_management.user_table.cannot_remove')}</p>
       </div>
     );
   }

+ 1 - 1
src/client/js/components/Admin/Users/StatusActivateButton.jsx

@@ -32,7 +32,7 @@ class StatusActivateButton extends React.Component {
 
     return (
       <a className="px-4" onClick={() => { this.onClickAcceptBtn() }}>
-        <i className="icon-fw icon-user-following"></i> {t('user_management:user_table.accept')}
+        <i className="icon-fw icon-user-following"></i> {t('admin:user_management.user_table.accept')}
       </a>
     );
   }

+ 3 - 3
src/client/js/components/Admin/Users/StatusSuspendedButton.jsx

@@ -32,7 +32,7 @@ class StatusSuspendedButton extends React.Component {
 
     return (
       <a className="px-4" onClick={() => { this.onClickDeactiveBtn() }}>
-        <i className="icon-fw icon-ban"></i> {t('user_management:user_table.deactivate_account')}
+        <i className="icon-fw icon-ban"></i> {t('admin:user_management.user_table.deactivate_account')}
       </a>
     );
   }
@@ -42,8 +42,8 @@ class StatusSuspendedButton extends React.Component {
 
     return (
       <div className="px-4">
-        <i className="icon-fw icon-ban mb-2"></i>{t('user_management:user_table.deactivate_account')}
-        <p className="alert alert-danger">{t('user_management:user_table.your_own')}</p>
+        <i className="icon-fw icon-ban mb-2"></i>{t('admin:user_management.user_table.deactivate_account')}
+        <p className="alert alert-danger">{t('admin:user_management.user_table.your_own')}</p>
       </div>
     );
   }

+ 8 - 8
src/client/js/components/Admin/Users/UserInviteModal.jsx

@@ -44,7 +44,7 @@ class UserInviteModal extends React.Component {
 
     return (
       <>
-        <label> {t('user_management:invite_modal.emails')}</label>
+        <label> {t('admin:user_management.invite_modal.emails')}</label>
         <textarea
           className="form-control"
           placeholder="e.g. user@growi.org"
@@ -52,7 +52,7 @@ class UserInviteModal extends React.Component {
           value={this.state.emailInputValue}
           onChange={this.handleInput}
         />
-        {!this.validEmail() && <p className="m-2 text-danger">{t('user_management:invite_modal.valid_email')}</p>}
+        {!this.validEmail() && <p className="m-2 text-danger">{t('admin:user_management.invite_modal.valid_email')}</p>}
       </>
     );
   }
@@ -63,8 +63,8 @@ class UserInviteModal extends React.Component {
 
     return (
       <>
-        <p>{t('user_management:invite_modal.temporary_password')}</p>
-        <p>{t('user_management:invite_modal.send_new_password')}</p>
+        <p>{t('admin:user_management.invite_modal.temporary_password')}</p>
+        <p>{t('admin:user_management.invite_modal.send_new_password')}</p>
         {invitedEmailList.createdUserList.length > 0 && this.renderCreatedEmail(invitedEmailList.createdUserList)}
         {invitedEmailList.existingEmailList.length > 0 && this.renderExistingEmail(invitedEmailList.existingEmailList)}
       </>
@@ -79,7 +79,7 @@ class UserInviteModal extends React.Component {
         <div className="checkbox checkbox-success text-left" onChange={this.handleCheckBox} style={{ flex: 1 }}>
           <input type="checkbox" id="sendEmail" className="form-check-input" name="sendEmail" defaultChecked={this.state.sendEmail} />
           <label htmlFor="sendEmail">
-            {t('user_management:invite_modal.invite_thru_email')}
+            {t('admin:user_management.invite_modal.invite_thru_email')}
           </label>
         </div>
         <div>
@@ -105,7 +105,7 @@ class UserInviteModal extends React.Component {
     return (
       <>
         <label className="mr-3 text-left text-danger" style={{ flex: 1 }}>
-          {t('user_management:invite_modal.send_temporary_password')}
+          {t('admin:user_management.invite_modal.send_temporary_password')}
         </label>
         <Button
           bsStyle="primary"
@@ -138,7 +138,7 @@ class UserInviteModal extends React.Component {
 
     return (
       <>
-        <p className="text-warning">{t('user_management:existing_email')}</p>
+        <p className="text-warning">{t('admin:user_management.existing_email')}</p>
         <ul>
           {emailList.map((user) => {
             return (
@@ -188,7 +188,7 @@ class UserInviteModal extends React.Component {
       <Modal show={adminUsersContainer.state.isUserInviteModalShown} onHide={this.onToggleModal}>
         <Modal.Header className="modal-header" closeButton>
           <Modal.Title>
-            {t('user_management:invite_users')}
+            {t('admin:user_management.invite_users')}
           </Modal.Title>
         </Modal.Header>
         <Modal.Body>

+ 3 - 3
src/client/js/components/Admin/Users/UserMenu.jsx

@@ -33,10 +33,10 @@ class UserMenu extends React.Component {
 
     return (
       <Fragment>
-        <li className="dropdown-header">{t('user_management:user_table.edit_menu')}</li>
+        <li className="dropdown-header">{t('admin:user_management.user_table.edit_menu')}</li>
         <li onClick={this.onPasswordResetClicked}>
           <a>
-            <i className="icon-fw icon-key"></i>{t('user_management:user_table.reset_password')}
+            <i className="icon-fw icon-key"></i>{t('admin:user_management.user_table.reset_password')}
           </a>
         </li>
       </Fragment>
@@ -65,7 +65,7 @@ class UserMenu extends React.Component {
     return (
       <Fragment>
         <li className="divider pl-0"></li>
-        <li className="dropdown-header">{t('user_management:user_table.administrator_menu')}</li>
+        <li className="dropdown-header">{t('admin:user_management.user_table.administrator_menu')}</li>
         <li>
           {user.admin === true && <RemoveAdminButton user={user} />}
           {user.admin === false && <GiveAdminButton user={user} />}

+ 1 - 1
src/client/js/components/Admin/Users/UserTable.jsx

@@ -85,7 +85,7 @@ class UserTable extends React.Component {
                 <tr key={user._id}>
                   <td>
                     <UserPicture user={user} className="picture img-circle" />
-                    {user.admin && <span className="label label-inverse label-admin ml-2">{t('user_management:user_table.administrator')}</span>}
+                    {user.admin && <span className="label label-inverse label-admin ml-2">{t('admin:user_management.user_table.administrator')}</span>}
                   </td>
                   <td>{this.getUserStatusLabel(user.status)}</td>
                   <td>