Password security policy (#4765)

* Psw (#4748)

* feat: 添加重置密码功能及相关接口

- 在用户模型中新增 passwordUpdateTime 字段以记录密码更新时间。
- 更新用户模式以支持密码更新时间的存储。
- 新增重置密码的模态框组件,允许用户重置密码。
- 实现重置密码的 API 接口,支持根据用户 ID 更新密码。
- 更新相关国际化文件,添加重置密码的提示信息。

* 更新国际化文件,添加重置密码相关提示信息,并优化重置密码模态框的实现。修复部分代码逻辑,确保用户体验流畅。

* 更新国际化文件,添加重置密码相关提示信息,优化重置密码模态框的实现,修复部分代码逻辑,确保用户体验流畅。新增获取用户密码更新时间的API接口,并调整相关逻辑以支持密码重置功能。

* update

* fix

* fix

* Added environment variables NEXT_PUBLIC_PASSWORD_UPDATETIME to support password update time configuration, update related logic to implement password mandatory update function, and optimize the implementation of reset password modal box to improve user experience.

* update index

* 更新用户密码重置功能,调整相关API接口,优化重置密码模态框的实现,确保用户体验流畅。修复部分代码逻辑,更新国际化提示信息。

* 删除获取用户密码更新时间的API接口,并在布局组件中移除不必要的重置密码模态框。优化代码结构,提升可维护性。

* update

* perf: reset expired password code

* perf: layout child components

* doc

* remove invalid env

* perf: update password code

---------

Co-authored-by: dreamer6680 <1468683855@qq.com>
This commit is contained in:
Archer
2025-05-08 12:11:08 +08:00
committed by GitHub
parent 96e7dd581e
commit c75f154728
24 changed files with 818 additions and 550 deletions

View File

@@ -55,6 +55,7 @@
"please_bind_notification_receiving_path": "Please bind the notification receiving method first",
"purchase_extra_package": "Upgrade",
"reminder_create_bound_notification_account": "Remind the creator to bind the notification account",
"reset_password": "reset password",
"resource_usage": "Usages",
"select_avatar": "Click to select avatar",
"standard_package_and_extra_resource_package": "Includes standard and extra plans",

View File

@@ -1,7 +1,28 @@
{
"Action": "Action",
"Add": "Add",
"Add Success": "Added Successfully",
"Add_new_input": "Add new input",
"All": "All",
"App": "Application",
"Cancel": "Cancel",
"Choose": "Choose",
"Click_to_expand": "Click to expand",
"Close": "Close",
"Code": "Code",
"Config": "Configuration",
"Confirm": "Confirm",
"Continue_Adding": "Continue adding",
"Copy": "Copy",
"Creating": "Creating",
"Delete": "Delete",
"Detail": "Detail",
"Documents": "Documents",
"Done": "Done",
"Download": "Download",
"Edit": "Edit",
"Error": "Error",
"Exit": "Exit",
"Export": "Export",
"FAQ.ai_point_a": "Each time an AI model is called, a certain amount of AI points will be consumed. \nFor specific calculation standards, please refer to the \"AI integral calculation standards\" above. \nThe system will give priority to the actual usage returned by the model manufacturer. If it is empty, the calculation method of GPT3.5 is used for estimation. 1Token≈0.7 Chinese characters ≈0.9 English words, and the characters that appear continuously may be considered as 1 Tokens.",
"FAQ.ai_point_expire_a": "Yes, they will expire. After the current package expires, the AI points will be reset to the new package's AI points. Annual package AI points are valid for one year, not monthly.",
@@ -19,36 +40,76 @@
"FAQ.package_overlay_q": "Can additional resource packs be stacked?",
"FAQ.switch_package_a": "The package usage rule is to prioritize the use of higher-level packages. Therefore, if the newly purchased package is higher than the current package, the new package will take effect immediately; otherwise, the current package will continue to be used.",
"FAQ.switch_package_q": "Will the subscription package be switched?",
"File": "File",
"Finish": "Finish",
"Folder": "Folder",
"FullScreen": "FullScreen",
"FullScreenLight": "FullScreenLight",
"Import": "Import",
"Input": "Input",
"Instructions": "Instruction",
"Intro": "Introduction",
"Loading": "Loading...",
"Login": "Login",
"More": "More",
"Move": "Move",
"Name": "Name",
"None": "None",
"OK": "OK",
"Open": "Open",
"Operation": "Operation",
"Other": "Other",
"Output": "Output",
"Params": "Parameters",
"Parse": "Analysis",
"Permission": "Permission",
"Permission_tip": "Individual permissions are greater than group permissions",
"Please Input Name": "Please Enter a Name",
"Preview": "Preview",
"Remove": "Remove",
"Rename": "Rename",
"Required_input": "Required",
"Reset": "Reset",
"Restart": "Restart",
"Resume": "Resume",
"Role": "Permission",
"Run": "Run",
"Running": "Running",
"Save": "Save",
"Save_and_exit": "Save and Exit",
"Search": "Search",
"Select_all": "Select all",
"Setting": "Setting",
"Status": "Status",
"Submit": "Submit",
"Success": "Success",
"Team": "Team",
"UnKnow": "Unknown",
"Unlimited": "Unlimited",
"Update": "Update",
"Username": "Username",
"Waiting": "Waiting",
"Warning": "Warning",
"Website": "Website",
"action_confirm": "Confirm",
"add_new": "add_new",
"add_new_param": "Add new param",
"all_quotes": "All quotes",
"templateTags.Image_generation": "Image generation",
"templateTags.Office_services": "Office Services",
"templateTags.Roleplay": "role play",
"templateTags.Web_search": "Search online",
"templateTags.Writing": "Writing",
"all_result": "Full Results",
"back": "Back",
"base_config": "Basic Configuration",
"bill_already_processed": "Order has been processed",
"bill_expired": "Order expired",
"bill_not_pay_processed": "Non-online orders",
"button.extra_dataset_size_tip": "You are purchasing [Extra Knowledge Base Capacity]",
"button.extra_points_tip": "You are purchasing [Extra AI Points]",
"can_copy_content_tip": "It is not possible to copy automatically using the browser, please manually copy the following content",
"choosable": "Choosable",
"chose_condition": "Choose Condition",
"chosen": "Chosen",
"classification": "Classification",
"click_drag_tip": "Click to Drag",
"click_select_avatar": "Click to Select Avatar",
"click_to_copy": "Click to copy",
"click_to_resume": "Click to Resume",
"code_editor": "Code Editor",
@@ -116,163 +177,21 @@
"code_error.user_error.balance_not_enough": "Insufficient Account Balance",
"code_error.user_error.bin_visitor_guest": "You Are Currently a Guest, Unauthorized to Operate",
"code_error.user_error.un_auth_user": "User Not Found",
"commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/",
"Action": "Action",
"Add": "Add",
"Add Success": "Added Successfully",
"Add_new_input": "Add new input",
"All": "All",
"Cancel": "Cancel",
"Choose": "Choose",
"Close": "Close",
"Code": "Code",
"Config": "Configuration",
"Confirm": "Confirm",
"comfirn_create": "Confirm Creation",
"comfirm_import": "comfirm_import",
"confirm_move": "Move Here",
"confirm_update": "confirm_update",
"comfirm_leave_page": "Confirm to Leave This Page?",
"Continue_Adding": "Continue adding",
"Copy": "Copy",
"copy_successful": "Copied Successfully",
"create_failed": "Creation Failed",
"create_success": "Created Successfully",
"create_time": "Creation Time",
"Creating": "Creating",
"custom_title": "Custom Title",
"Delete": "Delete",
"delete_failed": "Deletion Failed",
"delete_success": "Deleted Successfully",
"delete_warning": "Deletion Warning",
"delete_folder": "Delete Folder",
"Detail": "Detail",
"Documents": "Documents",
"Done": "Done",
"Edit": "Edit",
"Error": "Error",
"Exit": "Exit",
"exit_directly": "exit_directly",
"expired_time": "Expiration Time",
"File": "File",
"Finish": "Finish",
"FullScreen": "FullScreen",
"FullScreenLight": "FullScreenLight",
"Import": "Import",
"import_failed": "Import Failed",
"import_success": "Imported Successfully",
"Input": "Input",
"folder_description": "Folder Description",
"input_name": "Enter a Name",
"Intro": "Introduction",
"last_step": "Previous",
"last_use_time": "Last Use Time",
"load_failed": "load_failed",
"Loading": "Loading...",
"More": "More",
"no_select_data": "No Data Available",
"next_step": "Next",
"no_more_data": "No More Data",
"not_open": "Not Open",
"OK": "OK",
"Open": "Open",
"Other": "Other",
"Output": "Output",
"Params": "Parameters",
"Parse": "Analysis",
"psw_inconsistency": "Passwords Do Not Match",
"Permission": "Permission",
"Permission_tip": "Individual permissions are greater than group permissions",
"Please Input Name": "Please Enter a Name",
"Preview": "Preview",
"read_doc": "Read Document",
"Remove": "Remove",
"Rename": "Rename",
"request_error": "request_error",
"Reset": "Reset",
"Restart": "Restart",
"Role": "Permission",
"root_folder": "Root Folder",
"Run": "Run",
"Save": "Save",
"save_failed": "save_failed",
"save_success": "Saved Successfully",
"Save_and_exit": "Save and Exit",
"Search": "Search",
"select_file_failed": "File Selection Failed",
"select_template": "Select Template",
"set_avatar": "Click to set_avatar",
"Setting": "Setting",
"Status": "Status",
"submit_failed": "Submission Failed",
"Success": "Success",
"sync_success": "Synced Successfully",
"Team": "Team",
"un_used": "Unused",
"UnKnow": "Unknown",
"unknow_source": "Unknown Source",
"Unlimited": "Unlimited",
"Update": "Update",
"update_failed": "Update Failed",
"update_success": "Updated Successfully",
"Username": "Username",
"Waiting": "Waiting",
"Warning": "Warning",
"Website": "Website",
"all_result": "Full Results",
"click_select_avatar": "Click to Select Avatar",
"base_config": "Basic Configuration",
"choosable": "Choosable",
"action_confirm": "Confirm",
"copy_to_clipboard": "Copy to Clipboard",
"read_course": "Read Course",
"error.unKnow": "An Unexpected Error Occurred",
"export_to_json": "Export to JSON",
"failed": "Failed",
"click_drag_tip": "Click to Drag",
"move_success": "Moved Successfully",
"move_to": "Move to",
"no_child_folder": "No Subdirectories, Place Here",
"open_folder": "Open Folder",
"folder.empty": "No More Items in This Directory",
"folder.open_dataset": "Open Dataset",
"have_done": "Completed",
"input.Repeat Value": "Duplicate Value",
"is_requesting": "Requesting...",
"json_parse_error": "Possible JSON Error, Please Check Carefully",
"json_config": "JSON Configuration",
"link.UnValid": "Invalid Link",
"month": "Month",
"name_is_empty": "Name Cannot Be Empty",
"no_intro": "No Introduction Available",
"not_support": "Not Supported",
"page_center": "Page Center",
"redo_tip": "Redo ctrl shift z",
"redo_tip_mac": "Redo ⌘ shift z",
"request_end": "All Loaded",
"request_more": "Click to Load More",
"speech_error_tip": "Speech to Text Failed",
"speech_not_support": "Your Browser Does Not Support Speech Input",
"submit_success": "Submitted Successfully",
"submitted": "Submitted",
"support": "Support",
"system_help_chatbot": "Help Chatbot",
"use_helper": "Use Helper",
"ui.textarea.Magnifying": "Magnifying",
"undo_tip": "Undo ctrl z",
"undo_tip_mac": "Undo ⌘ z ",
"upload_file": "Upload File",
"zoomin_tip": "Zoom Out ctrl -",
"zoomin_tip_mac": "Zoom Out ⌘ -",
"zoomout_tip": "Zoom In ctrl +",
"zoomout_tip_mac": "Zoom In ⌘ +",
"comfirn_create": "Confirm Creation",
"commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/",
"comon.Continue_Adding": "Continue Adding",
"compliance.chat": "The content is generated by third-party AI and cannot be guaranteed to be true and accurate. It is for reference only.",
"compliance.compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
"compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
"confirm_choice": "Confirm Choice",
"confirm_move": "Move Here",
"confirm_update": "confirm_update",
"contact_way": "Notification Received",
"contribute_app_template": "Contribute Template",
"copy_successful": "Copied Successfully",
"copy_to_clipboard": "Copy to Clipboard",
"core.Chat": "Chat",
"core.ai.Max context": "Max Context",
"core.ai.Model": "Model",
@@ -492,7 +411,6 @@
"core.chat.response.user_select_result": "User Selection Result",
"core.chat.retry": "Regenerate",
"core.chat.tts.Stop Speech": "Stop",
"core.tip.leave page": "Content has been modified, confirm to leave the page?",
"core.dataset.Choose Dataset": "Associate Dataset",
"core.dataset.Collection": "Dataset",
"core.dataset.Create dataset": "Create a {{name}}",
@@ -567,7 +485,6 @@
"core.dataset.import.Custom text desc": "Manually enter a piece of text as a dataset",
"core.dataset.import.Data process params": "Data Processing Parameters",
"core.dataset.import.Down load csv template": "Click to Download CSV Template",
"core.dataset.import.import_success": "Import Successful, Please Wait for Training",
"core.dataset.import.Link name": "Web Link",
"core.dataset.import.Link name placeholder": "Only supports static links. If the data is empty after uploading, the link may not be readable\nEach line one, up to 10 links at a time",
"core.dataset.import.Local file": "Local File",
@@ -588,6 +505,7 @@
"core.dataset.import.Upload status": "Status",
"core.dataset.import.Web link": "Web Link",
"core.dataset.import.Web link desc": "Read static web page content as a dataset",
"core.dataset.import.import_success": "Import Successful, Please Wait for Training",
"core.dataset.link": "Link",
"core.dataset.search.Dataset Search Params": "Dataset Search Configuration",
"core.dataset.search.Empty result response": "Empty Search Response",
@@ -769,6 +687,7 @@
"core.plugin.Get Plugin Module Detail Failed": "Failed to Retrieve Plugin Information",
"core.plugin.Http plugin intro placeholder": "For display only, no actual effect",
"core.plugin.cost": "Points Consumption:",
"core.tip.leave page": "Content has been modified, confirm to leave the page?",
"core.view_chat_detail": "View Chat Details",
"core.workflow.Can not delete node": "This Node Cannot Be Deleted",
"core.workflow.Change input type tip": "Changing the input type will clear the filled values, please confirm!",
@@ -822,7 +741,11 @@
"core.workflow.value": "Value",
"core.workflow.variable": "Variable",
"create": "Create",
"create_failed": "Creation Failed",
"create_success": "Created Successfully",
"create_time": "Creation Time",
"cron_job_run_app": "Scheduled Task",
"custom_title": "Custom Title",
"data_index_custom": "Custom index",
"data_index_default": "Default index",
"data_index_image": "Image Index",
@@ -872,6 +795,10 @@
"dataset_text_model_tip": "Used for text processing in the knowledge base preprocessing stage, such as automatic supplementary indexing, Q&A pair extraction.",
"deep_rag_search": "In-depth search",
"delete_api": "Are you sure you want to delete this API key? \nAfter deletion, the key will become invalid immediately and the corresponding conversation log will not be deleted. Please confirm!",
"delete_failed": "Deletion Failed",
"delete_folder": "Delete Folder",
"delete_success": "Deleted Successfully",
"delete_warning": "Deletion Warning",
"embedding_model_not_config": "No index model is detected",
"error.Create failed": "Create failed",
"error.code_error": "Verification code error",
@@ -881,6 +808,7 @@
"error.missingParams": "Insufficient parameters",
"error.send_auth_code_too_frequently": "Please do not obtain verification code frequently",
"error.too_many_request": "Too many request",
"error.unKnow": "An Unexpected Error Occurred",
"error.upload_file_error_filename": "{{name}} Upload Failed",
"error.upload_image_error": "File upload failed",
"error.username_empty": "Account cannot be empty",
@@ -890,13 +818,23 @@
"error_llm_not_config": "Unconfigured file understanding model",
"error_un_permission": "No permission to operate",
"error_vlm_not_config": "Image comprehension model not configured",
"exit_directly": "exit_directly",
"expired_time": "Expiration Time",
"export_to_json": "Export to JSON",
"extraction_results": "Extraction Results",
"failed": "Failed",
"field_name": "Field Name",
"folder.empty": "No More Items in This Directory",
"folder.open_dataset": "Open Dataset",
"folder_description": "Folder Description",
"free": "Free",
"get_QR_failed": "Failed to Get QR Code",
"get_app_failed": "Failed to Retrieve App",
"get_laf_failed": "Failed to Retrieve Laf Function List",
"has_verification": "Verified, Click to Unbind",
"have_done": "Completed",
"import_failed": "Import Failed",
"import_success": "Imported Successfully",
"info.buy_extra": "Buy Extra Package",
"info.csv_download": "Click to Download Batch Test Template",
"info.csv_message": "Read the first column of the CSV file for batch testing, supporting up to 100 groups of data at a time.",
@@ -908,14 +846,23 @@
"info.open_api_notice": "You can fill in the relevant keys of OpenAI/OneAPI. If you fill in this content, the 'AI Chat', 'Question Classification', and 'Content Extraction' on the online platform will use the key you filled in and will not be charged. Please check if your key has access to the corresponding model. GPT models can choose FastAI.",
"info.open_api_placeholder": "Request address, default is the official OpenAI. You can fill in the transit address, 'v1' will not be automatically completed",
"info.resource": "Resource Usage",
"input.Repeat Value": "Duplicate Value",
"input_name": "Enter a Name",
"invalid_variable": "Invalid Variable",
"is_open": "Is Open",
"is_requesting": "Requesting...",
"is_using": "In Use",
"item_description": "Field Description",
"item_name": "Field Name",
"json_config": "JSON Configuration",
"json_parse_error": "Possible JSON Error, Please Check Carefully",
"just_now": "just",
"key_repetition": "Key Repetition",
"last_step": "Previous",
"last_use_time": "Last Use Time",
"link.UnValid": "Invalid Link",
"llm_model_not_config": "No language model was detected",
"load_failed": "load_failed",
"max_quote_tokens": "Quote cap",
"max_quote_tokens_tips": "The maximum number of tokens in a single search, about 1 character in Chinese = 1.7 tokens, and about 1 character in English = 1 token",
"mcp_server": "MCP Services",
@@ -948,7 +895,11 @@
"model_sparkdesk": "SprkDesk",
"model_stepfun": "StepFun",
"model_yi": "Yi",
"month": "Month",
"move.confirm": "Confirm move",
"move_success": "Moved Successfully",
"move_to": "Move to",
"name_is_empty": "Name Cannot Be Empty",
"navbar.Account": "Account",
"navbar.Chat": "Chat",
"navbar.Datasets": "Dataset",
@@ -956,13 +907,22 @@
"navbar.Toolkit": "Toolkit",
"navbar.Tools": "Tools",
"new_create": "Create New",
"next_step": "Next",
"no": "No",
"no_child_folder": "No Subdirectories, Place Here",
"no_intro": "No Introduction Available",
"no_laf_env": "System Not Configured with Laf Environment",
"no_more_data": "No More Data",
"no_pay_way": "There is no suitable payment channel in the system",
"no_select_data": "No Data Available",
"not_model_config": "No related model configured",
"not_open": "Not Open",
"not_permission": "The current subscription package does not support team operation logs",
"not_support": "Not Supported",
"not_yet_introduced": "No Introduction Yet",
"open_folder": "Open Folder",
"option": "Option",
"page_center": "Page Center",
"pay.amount": "Amount",
"pay.error_desc": "There was a problem when converting payment routes",
"pay.noclose": "After payment is completed, please wait for the system to update automatically",
@@ -1025,14 +985,34 @@
"plugin.path": "Path",
"price_over_wx_limit": "Exceed payment provider limit: WeChat Pay only supports less than 6,000 yuan",
"prompt_input_placeholder": "Please enter the prompt word",
"psw_inconsistency": "Passwords Do Not Match",
"question_feedback": "Work order",
"read_course": "Read Course",
"read_doc": "Read Document",
"read_quote": "View citations",
"redo_tip": "Redo ctrl shift z",
"redo_tip_mac": "Redo ⌘ shift z",
"request_end": "All Loaded",
"request_error": "request_error",
"request_more": "Click to Load More",
"required": "Required",
"rerank_weight": "Rearrange weights",
"resume_failed": "Resume Failed",
"root_folder": "Root Folder",
"save_failed": "save_failed",
"save_success": "Saved Successfully",
"scan_code": "Scan the QR code to pay",
"select_file_failed": "File Selection Failed",
"select_reference_variable": "Select Reference Variable",
"select_template": "Select Template",
"set_avatar": "Click to set_avatar",
"share_link": "Share Link",
"speech_error_tip": "Speech to Text Failed",
"speech_not_support": "Your Browser Does Not Support Speech Input",
"submit_failed": "Submission Failed",
"submit_success": "Submitted Successfully",
"submitted": "Submitted",
"support": "Support",
"support.account.Individuation": "Personalization",
"support.inform.Read": "Read",
"support.openapi.Api baseurl": "API Base URL",
@@ -1210,18 +1190,34 @@
"support.wallet.usage.Usage Detail": "Usage Details",
"support.wallet.usage.Whisper": "Voice Input",
"sync_link": "Sync Link",
"sync_success": "Synced Successfully",
"system.Concat us": "Contact Us",
"system.Help Document": "Help Document",
"system_help_chatbot": "Help Chatbot",
"tag_list": "Tag List",
"team_tag": "Team Tag",
"templateTags.Image_generation": "Image generation",
"templateTags.Office_services": "Office Services",
"templateTags.Roleplay": "role play",
"templateTags.Web_search": "Search online",
"templateTags.Writing": "Writing",
"template_market": "Template Market",
"textarea_variable_picker_tip": "Enter \"/\" to select a variable",
"ui.textarea.Magnifying": "Magnifying",
"un_used": "Unused",
"unauth_token": "The certificate has expired, please log in again",
"undo_tip": "Undo ctrl z",
"undo_tip_mac": "Undo ⌘ z ",
"unit.character": "Character",
"unit.minute": "Minute",
"unit.seconds": "Second",
"unknow_source": "Unknown Source",
"unusable_variable": "No Usable Variables",
"update_failed": "Update Failed",
"update_success": "Updated Successfully",
"upload_file": "Upload File",
"upload_file_error": "File Upload Failed",
"use_helper": "Use Helper",
"user.Account": "Account",
"user.Amount of earnings": "Earnings (¥)",
"user.Amount of inviter": "Total Number of Invites",
@@ -1235,11 +1231,13 @@
"user.Laf Account Setting": "Laf Account Configuration",
"user.Language": "Language",
"user.Member Name": "Nickname",
"user.No_right_to_reset_password": "You do not have the right to reset the password",
"user.Notification Receive": "Notification Receive",
"user.Notification Receive Bind": "Please bind the notification receive method first",
"user.Old password is error": "Old Password is Incorrect",
"user.OpenAI Account Setting": "OpenAI Account Configuration",
"user.Password": "Password",
"user.Password has no change": "New password is the same as the old password",
"user.Pay": "Recharge",
"user.Promotion": "Promotion",
"user.Promotion Rate": "Cashback Rate",
@@ -1254,12 +1252,16 @@
"user.Update password successful": "Password Updated Successfully",
"user.apikey.key": "API Key",
"user.confirm_password": "Confirm Password",
"user.init_password": "Please initialize password",
"user.new_password": "New Password",
"user.no_invite_records": "No Invite Records",
"user.no_notice": "No Notices",
"user.no_usage_records": "No Usage Records",
"user.old_password": "Old Password",
"user.password_message": "Password must be at least 4 characters and at most 60 characters",
"user.password_tip": "Password must be at least 6 characters long and contain at least two combinations: numbers, letters, or special characters",
"user.reset_password": "Reset Password",
"user.reset_password_tip": "The initial password is not set/the password has not been modified for a long time, please reset the password",
"user.team.Balance": "Team Balance",
"user.team.Check Team": "Switch",
"user.team.Confirm Invite": "Confirm Invite",
@@ -1299,5 +1301,9 @@
"xx_search_result": "{{key}} Search Results",
"yes": "Yes",
"yesterday": "yesterday",
"yesterday_detail_time": "Yesterday {{time}}"
"yesterday_detail_time": "Yesterday {{time}}",
"zoomin_tip": "Zoom Out ctrl -",
"zoomin_tip_mac": "Zoom Out ⌘ -",
"zoomout_tip": "Zoom In ctrl +",
"zoomout_tip_mac": "Zoom In ⌘ +"
}

View File

@@ -28,6 +28,7 @@
"login.success": "Login Successful",
"manage_team": "Manage team",
"name": "Name",
"new_password": "New Password",
"notification.remind_owner_bind": "Please remind the creator to bind a notification account",
"operations": "Actions",
"owner": "owner",