/* ==========================================================================================================
Taskist - Localisation resources (en-IN)
Every text the application shows. Keys are sorted alphabetically: add new keys in place.
Run after 02_defaults.sql (it creates the language). Idempotent: keys are matched per language, so
re-running inserts only missing keys and never overwrites a text edited under Configuration -> Language.
For another language, copy this file, change @culture and translate the values.
Keep the file UTF-8 with BOM; with sqlcmd pass -f 65001.
========================================================================================================== */
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
DECLARE @culture NVARCHAR(20) = N'en-IN';
DECLARE @languageId INT = (SELECT TOP (1) [Id] FROM [Language] WHERE [LanguageCulture] = @culture ORDER BY [Id]);
IF @languageId IS NULL
THROW 50001, 'The language is missing. Run 02_defaults.sql first.', 1;
INSERT INTO [LocaleResource] ([LanguageId], [ResourceKey], [ResourceValue])
SELECT @languageId, s.[ResourceKey], s.[ResourceValue]
FROM (VALUES
(N'AccessDenied.Title', N'Access Denied!'),
(N'ActivityLogPage.Title', N'Activity & Audit Log'),
(N'AddressModel.Address1', N'Address Line 1'),
(N'AddressModel.Address1.MaxLengthMsg', N'The length of address line 1 must be 750 characters or fewer'),
(N'AddressModel.Address1.RequiredMsg', N'Address line 1 is required'),
(N'AddressModel.Address2', N'Address Line 2'),
(N'AddressModel.City', N'City'),
(N'AddressModel.City.MaxLengthMsg', N'The length of city must be 100 characters or fewer'),
(N'AddressModel.City.RequiredMsg', N'City is required'),
(N'AddressModel.ZipPostalCode', N'Zip/Postal Code'),
(N'AddressModel.ZipPostalCode.MaxLengthMsg', N'The length of zip or postal code must be 20 characters or fewer'),
(N'AddressModel.ZipPostalCode.RequiredMsg', N'Zip or Postal code is required'),
(N'Announcement.AckCount', N'acknowledgement(s)'),
(N'Announcement.Acknowledge', N'Acknowledge'),
(N'Announcement.AckOn', N'Acknowledged On'),
(N'Announcement.AckUser', N'User'),
(N'Announcement.GotIt', N'Got it'),
(N'Announcement.NoAcks', N'No one has acknowledged this yet.'),
(N'AnnouncementGrid.Acknowledgements', N'Acknowledgements'),
(N'AnnouncementGrid.Active', N'Active'),
(N'AnnouncementGrid.Audience', N'Audience'),
(N'AnnouncementGrid.Severity', N'Severity'),
(N'AnnouncementGrid.Title', N'Title'),
(N'AnnouncementGrid.Type', N'Type'),
(N'AnnouncementGrid.ValidFrom', N'Valid From'),
(N'AnnouncementGrid.ValidTo', N'Valid To'),
(N'AnnouncementModel.Active', N'Active'),
(N'AnnouncementModel.Audience', N'Audience'),
(N'AnnouncementModel.Body', N'Message'),
(N'AnnouncementModel.Body.RequiredMsg', N'Message is required'),
(N'AnnouncementModel.DisplayOrder', N'Display Order'),
(N'AnnouncementModel.RequiresAcknowledgement', N'Requires acknowledgement'),
(N'AnnouncementModel.Severity', N'Severity'),
(N'AnnouncementModel.Title', N'Title'),
(N'AnnouncementModel.Title.MaxLengthMsg', N'Title must be 200 characters or fewer'),
(N'AnnouncementModel.Title.RequiredMsg', N'Title is required'),
(N'AnnouncementModel.Type', N'Type'),
(N'AnnouncementModel.ValidFrom', N'Valid From'),
(N'AnnouncementModel.ValidTo', N'Valid To'),
(N'AnnouncementModel.ValidTo.RangeMsg', N'Valid To must be on or after Valid From'),
(N'AnnouncementPage.Title', N'Announcements'),
(N'Backlog.Assignee', N'Developer'),
(N'Backlog.Branch.Base', N'Create from'),
(N'Backlog.Branch.ConnectButton', N'Connect my Git account'),
(N'Backlog.Branch.ConnectWhy', N'Branches are created with your own GitLab account, so GitLab shows you as the creator and applies your project permissions. You only need to connect once.'),
(N'Backlog.Branch.Create', N'Create branch'),
(N'Backlog.Branch.Created', N'Branch {0} created and linked to {1} task(s). Checkout command copied.'),
(N'Backlog.Branch.CreateTitle', N'Create a GitLab branch'),
(N'Backlog.Branch.Disabled', N'Branch creation from Taskist is turned off. An administrator can enable it under Configuration → Integration.'),
(N'Backlog.Branch.ExistingAll', N'All selected tasks already have a branch or are already in review. Use the existing branch, or tick below if you really need another one.'),
(N'Backlog.Branch.ExistingSome', N'Left out because they already have work in progress:'),
(N'Backlog.Branch.IncludeExisting', N'Create a new branch for these tasks anyway'),
(N'Backlog.Branch.Linked', N'Branch {0} linked to {1} task(s).'),
(N'Backlog.Branch.LinkExisting', N'Link existing branch'),
(N'Backlog.Branch.LinkInfo', N'The branch will be linked to: {0}'),
(N'Backlog.Branch.LinkTitle', N'Link an existing GitLab branch'),
(N'Backlog.Branch.Name', N'Branch name'),
(N'Backlog.Branch.NameRequired', N'Enter a branch name.'),
(N'Backlog.Branch.NoResults', N'No matching branches.'),
(N'Backlog.Branch.SearchPlaceholder', N'Search branches…'),
(N'Backlog.Branch.Unlink', N'Unlink branch'),
(N'Backlog.Branch.UnlinkConfirm', N'Unlink branch {0} from this task? The branch itself stays in GitLab.'),
(N'Backlog.Branch.Unlinked', N'Branch {0} unlinked.'),
(N'Backlog.Cleanup.Button', N'Cleanup'),
(N'Backlog.Cleanup.Confirm', N'Delete {0} branch(es) in GitLab? This cannot be undone.'),
(N'Backlog.Cleanup.Connect', N'Connect your GitLab account to delete branches.'),
(N'Backlog.Cleanup.Delete', N'Delete'),
(N'Backlog.Cleanup.Empty', N'Nothing to clean up.'),
(N'Backlog.Cleanup.FailedProjects', N'Could not read branches for: {0}'),
(N'Backlog.Cleanup.Intro', N'Tracked branches in your projects that look finished: merged, tasks closed, already removed from GitLab, or idle for {0}+ days. Protected and default branches are never listed.'),
(N'Backlog.Cleanup.LastCommit', N'Last commit {0}'),
(N'Backlog.Cleanup.Loading', N'Checking branches in GitLab…'),
(N'Backlog.Cleanup.NoTask', N'No task'),
(N'Backlog.Cleanup.ProtectedNote', N'Deletes in GitLab with your own account.'),
(N'Backlog.Cleanup.Reason.Gone', N'Already removed in GitLab'),
(N'Backlog.Cleanup.Reason.Gone.Hint', N'The branch no longer exists in GitLab; this just clears it from Taskist.'),
(N'Backlog.Cleanup.Reason.Idle', N'Idle'),
(N'Backlog.Cleanup.Reason.Idle.Hint', N'No commits for {0}+ days and not merged. Check before deleting.'),
(N'Backlog.Cleanup.Reason.Merged', N'Merged'),
(N'Backlog.Cleanup.Reason.Merged.Hint', N'Fully merged into the default branch.'),
(N'Backlog.Cleanup.Reason.TasksClosed', N'Tasks closed'),
(N'Backlog.Cleanup.Reason.TasksClosed.Hint', N'Every linked task is resolved, archived or deleted, but the branch is not merged. Check before deleting.'),
(N'Backlog.Cleanup.Result', N'{0} branch(es) deleted, {1} already gone.'),
(N'Backlog.Cleanup.Title', N'Branch cleanup'),
(N'Backlog.Code.AddBranch', N'Branch'),
(N'Backlog.Code.BranchActions', N'Branch actions'),
(N'Backlog.Code.BranchDeleted', N'deleted in GitLab'),
(N'Backlog.Code.BranchDeletedHint', N'This branch no longer exists in GitLab (usually deleted after merging). It is kept here as a record of where the work was done.'),
(N'Backlog.Code.Branches', N'Branches'),
(N'Backlog.Code.ClosingMr', N'Closing MR'),
(N'Backlog.Code.ClosingMrHint', N'The merge request recorded when this task was closed.'),
(N'Backlog.Code.ClosingMrManual', N'Entered by hand when the task was closed.'),
(N'Backlog.Code.CopyBranchName', N'Copy branch name'),
(N'Backlog.Code.CopyCheckout', N'Copy checkout command'),
(N'Backlog.Code.From', N'from'),
(N'Backlog.Code.GroupHint', N'Created from Taskist for several tasks together: merge requests from this branch count for all of them.'),
(N'Backlog.Code.GroupTasks', N'Group · {0} tasks'),
(N'Backlog.Code.LinkSourceBranch', N'Link branch'),
(N'Backlog.Code.LinkSourceBranchHint', N'Link this merge request''s source branch to the task'),
(N'Backlog.Code.Loading', N'Loading code information…'),
(N'Backlog.Code.MergeRequests', N'Merge requests'),
(N'Backlog.Code.NoBranches', N'No branch linked yet.'),
(N'Backlog.Code.NoMergeRequestsHint', N'No merge requests yet. Create one from a branch above, or put #{0} in the merge request title in GitLab.'),
(N'Backlog.Code.NotConfigured', N'No Git connection is configured. An administrator can add one under Integrations → Git Connections.'),
(N'Backlog.Code.NotLinked', N'This project has no linked repository yet (Masters → Projects → Repositories).'),
(N'Backlog.Code.OpenBranchInGitLab', N'Open in repository'),
(N'Backlog.Code.Partial', N'Some information could not be loaded from GitLab.'),
(N'Backlog.Code.Refresh', N'Refresh from GitLab'),
(N'Backlog.Code.Review', N'Review'),
(N'Backlog.Code.ReviewHint', N'Open the review panel: diff, comments, approve, merge'),
(N'Backlog.Code.SharedWith', N'shared with'),
(N'Backlog.Code.Title', N'Code'),
(N'Backlog.Code.Unreachable', N'Could not reach GitLab right now. Try refreshing in a moment.'),
(N'Backlog.CreatedBy', N'Created By'),
(N'Backlog.DeleteNotAllowedMsg', N'You can only delete tasks in a project where you have delete permission.'),
(N'Backlog.Description', N'Description'),
(N'Backlog.DueDate', N'Due Date'),
(N'Backlog.ExternalNotes', N'Reported by'),
(N'Backlog.Issue.Closed', N'Closed'),
(N'Backlog.Issue.CommentsHint', N'comments ticked "Post to issue" are sent'),
(N'Backlog.Issue.LastSynced', N'Synced'),
(N'Backlog.Issue.NotEnabled', N'Issue sync is not enabled for this project''s repositories.'),
(N'Backlog.Issue.Open', N'Open'),
(N'Backlog.Issue.PostToIssue', N'Post to issue'),
(N'Backlog.Issue.PostToIssueHint', N'Also post this comment on the linked GitHub/GitLab issue.'),
(N'Backlog.Issue.Public', N'Public'),
(N'Backlog.Issue.PublicHint', N'The repository is public: the issue, its title, description and synced comments are visible to everyone.'),
(N'Backlog.Issue.PublicWarning', N'This repository is public. Make sure the task contains nothing confidential.'),
(N'Backlog.Issue.Publish', N'Create issue in {0}'),
(N'Backlog.Issue.PublishConfirm', N'Create an issue in {0} from this task? Title, description, labels and assignee are kept in sync from then on.'),
(N'Backlog.Issue.StopSync', N'Stop syncing'),
(N'Backlog.Issue.SyncNow', N'Sync now'),
(N'Backlog.Issue.SyncStopped', N'Sync stopped'),
(N'Backlog.Issue.Title', N'Issue'),
(N'Backlog.Issue.UnlinkConfirm', N'Stop syncing with this issue? The issue itself is not changed.'),
(N'Backlog.Module', N'Module'),
(N'Backlog.Mr.Create', N'Create merge request'),
(N'Backlog.Mr.CreateButton', N'Create merge request'),
(N'Backlog.Mr.Created', N'{0} created.'),
(N'Backlog.Mr.Description', N'Description'),
(N'Backlog.Mr.Draft', N'Create as draft'),
(N'Backlog.Mr.Existing', N'An open merge request already exists for this branch:'),
(N'Backlog.Mr.From', N'From'),
(N'Backlog.Mr.Into', N'Into'),
(N'Backlog.Mr.NoReviewer', N'none (the project has no Team Lead or Code Reviewer with a GitLab user)'),
(N'Backlog.Mr.RemoveSource', N'Delete the source branch after merge'),
(N'Backlog.Mr.Reviewer', N'Reviewer'),
(N'Backlog.Mr.StatusMoved', N'The merge request was created and the task status changed. Save or discard your unsaved edits, then refresh the page to see the new status.'),
(N'Backlog.Mr.Title', N'Title'),
(N'Backlog.Mr.TitleRequired', N'Enter a title.'),
(N'Backlog.Mr.WillMove', N'Task {0} will move to "{1}" when the merge request is created (drafts wait until marked ready).'),
(N'Backlog.NotAuthorizedEditMsg', N'You are not authorized to edit this task.'),
(N'Backlog.Parent', N'Parent Task'),
(N'Backlog.PlannedStartDate', N'Planned Start'),
(N'Backlog.Project', N'Project'),
(N'Backlog.RcaClearOnTypeChangeMsg', N'Changing the type away from Bug will clear the Root Cause Analysis. Continue?'),
(N'Backlog.Release', N'Release'),
(N'Backlog.Reporter', N'Reporter'),
(N'Backlog.RootCauseAnalysis', N'Root Cause Analysis'),
(N'Backlog.Severity', N'Priority'),
(N'Backlog.Status', N'Status'),
(N'Backlog.StatusGroup', N'Status Group'),
(N'Backlog.SubModule', N'Sub-Module'),
(N'Backlog.Tags', N'Tags'),
(N'Backlog.TaskType', N'Type'),
(N'Backlog.Tester', N'Tester'),
(N'Backlog.Title', N'Title'),
(N'Backlog.UnlinkedBranches.Button', N'Unlinked branches'),
(N'Backlog.UnlinkedBranches.Empty', N'Every branch is linked to a task.'),
(N'Backlog.UnlinkedBranches.Intro', N'These branches were pushed to GitLab with names that do not contain a task number, so they could not be linked automatically. Link each one to its task(s), or ask the developer to follow the naming convention (e.g. bugfix/2520-short-title).'),
(N'Backlog.UnlinkedBranches.LinkToTask', N'Link to task'),
(N'Backlog.UnlinkedBranches.Loading', N'Loading branches…'),
(N'Backlog.UnlinkedBranches.Prompt', N'Task number(s) to link this branch to'),
(N'Backlog.UnlinkedBranches.PushedBy', N'pushed by'),
(N'Backlog.UnlinkedBranches.Title', N'Branches not linked to a task'),
(N'BacklogFilter.Any', N'Any'),
(N'BacklogFilter.CollapseAll', N'Collapse all'),
(N'BacklogFilter.ExpandAll', N'Expand all'),
(N'BacklogFilter.HideInactive', N'Hide inactive'),
(N'BacklogFilter.OpenDaysMin', N'Open for at least (days)'),
(N'BacklogFilter.Preset.MyTasks', N'My Tasks'),
(N'BacklogFilter.Preset.Overdue', N'Overdue'),
(N'BacklogFilter.Preset.Release', N'Release'),
(N'BacklogFilter.Preset.Reopened', N'Reopened'),
(N'BacklogFilter.Preset.Resolved', N'Resolved'),
(N'BacklogFilter.SaveAs', N'Save as'),
(N'BacklogFilter.Section.Dates', N'Dates & age'),
(N'BacklogFilter.Section.Module', N'Module'),
(N'BacklogFilter.Section.People', N'People'),
(N'BacklogFilter.ShowInactive', N'Show inactive'),
(N'BacklogFilter.Stale', N'Stale: 7+ days in the same status'),
(N'BacklogFilter.StatusDaysMin', N'In current status for at least (days)'),
(N'BacklogGrid.Age', N'Age'),
(N'BacklogGrid.AgeHelp', N'12d · 4d = open for 12 days · 4 days in the current status.
Sort ▼ oldest first, ▲ newest first. Closed tasks show – and are always listed last.'),
(N'BacklogGrid.Assignee', N'Developer'),
(N'BacklogGrid.Button.BatchUpdate', N'Update'),
(N'BacklogGrid.Button.Download', N'Download'),
(N'BacklogGrid.CreatedBy', N'Created By'),
(N'BacklogGrid.CreatedOn', N'Created On'),
(N'BacklogGrid.DueDate', N'Due Date'),
(N'BacklogGrid.Flat', N'Flat'),
(N'BacklogGrid.GroupByParent', N'Group by parent'),
(N'BacklogGrid.Grouped', N'Grouped'),
(N'BacklogGrid.Icon.Attachments', N'attachment(s)'),
(N'BacklogGrid.Icon.Branch', N'Branch'),
(N'BacklogGrid.Icon.ClosingDetails', N'Closing details'),
(N'BacklogGrid.Icon.Comments', N'comment(s)'),
(N'BacklogGrid.Module', N'Module'),
(N'BacklogGrid.Project', N'Project'),
(N'BacklogGrid.Refresh', N'Refresh'),
(N'BacklogGrid.RefreshUpdated', N'updated {0}'),
(N'BacklogGrid.Release', N'Release'),
(N'BacklogGrid.Reporter', N'Reporter'),
(N'BacklogGrid.Selection.Clear', N'Clear selection'),
(N'BacklogGrid.Selection.Selected', N'selected'),
(N'BacklogGrid.Severity', N'Priority'),
(N'BacklogGrid.Status', N'Status'),
(N'BacklogGrid.SubModule', N'Sub-Module'),
(N'BacklogGrid.TaskId', N'#'),
(N'BacklogGrid.TaskType', N'Type'),
(N'BacklogGrid.Tester', N'Tester'),
(N'BacklogGrid.Title', N'Title'),
(N'BacklogModel.Reporter.RequiredMsg', N'Reporter is required'),
(N'BacklogModel.Status.RequiredMsg', N'Required Msg'),
(N'BacklogModel.TaskType.RequiredMsg', N'Type is required'),
(N'BacklogModel.Title.MaxLengthMsg', N'The length of title must be 500 characters or fewer'),
(N'BacklogModel.Title.RequiredMsg', N'Title is required'),
(N'BacklogPage.Button.Comments', N'Comments'),
(N'BacklogPage.Button.History', N'History'),
(N'BacklogPage.ClosingChecklist.Mr', N'Merge request'),
(N'BacklogPage.ClosingChecklist.Title', N'Closing checklist'),
(N'BacklogPage.DescriptionTabTitle', N'Description'),
(N'BacklogPage.EnvironmentTabTitle', N'Environment'),
(N'BacklogPage.RootCauseFix.Resolution', N'Resolution'),
(N'BacklogPage.RootCauseFix.ResolutionHint', N'What was changed to fix it, and where?'),
(N'BacklogPage.RootCauseFix.RootCause', N'Root cause'),
(N'BacklogPage.RootCauseFix.RootCauseHint', N'Why did it happen? Describe the underlying cause, not the symptom.'),
(N'BacklogPage.RootCauseFixTabTitle', N'Root cause & fix'),
(N'BacklogPage.Title', N'Backlog'),
(N'BacklogRelease.Title', N'Release'),
(N'Board.ClosingComment', N'Closing details'),
(N'Board.Columns', N'Columns'),
(N'Board.ColumnsHint', N'Choose which statuses appear as columns on your board.'),
(N'Board.Project', N'Project'),
(N'Board.SelectAll', N'Select all'),
(N'Board.ShowAll', N'Show all'),
(N'Board.Unassigned', N'Unassigned'),
(N'BoardPage.Title', N'Board'),
(N'Button.AddNew', N'Add New'),
(N'Button.Apply', N'Apply'),
(N'Button.Back', N'Back'),
(N'Button.Cancel', N'Cancel'),
(N'Button.Delete', N'Delete'),
(N'Button.Edit', N'Edit'),
(N'Button.Export', N'Export'),
(N'Button.Filter', N'Filter'),
(N'Button.Reset', N'Reset'),
(N'Button.Save', N'Save'),
(N'Button.SaveAndContinue', N'Save & Add New'),
(N'Button.Search', N'Search'),
(N'ButtonUser.ResetPassword', N'Reset Password'),
(N'ChangePasswordModel.ConfirmNewPassword', N'Confirm New Password'),
(N'ChangePasswordModel.ConfirmNewPassword.MaxLengthMsg', N'The length of confirm password must be 100 characters or fewer'),
(N'ChangePasswordModel.ConfirmNewPassword.NotMatch', N'New password and confirm password must match'),
(N'ChangePasswordModel.ConfirmNewPassword.RequiredMsg', N'Confirm password is required'),
(N'ChangePasswordModel.CurrentPassword', N'Current Password'),
(N'ChangePasswordModel.CurrentPassword.MaxLengthMsg', N'The length of current password must be 100 characters or fewer'),
(N'ChangePasswordModel.CurrentPassword.RequiredMsg', N'Current password is required'),
(N'ChangePasswordModel.CurrentPassword.WrongPassword', N'Your current password is not valid'),
(N'ChangePasswordModel.NewPassword', N'New Password'),
(N'ChangePasswordModel.NewPassword.MaxLengthMsg', N'The length of new password must be 100 characters or fewer'),
(N'ChangePasswordModel.NewPassword.RequiredMsg', N'New password is required'),
(N'ChatEvent.CodeReview', N'Code review activity'),
(N'ChatEvent.Commented', N'New comment'),
(N'ChatEvent.Conflict', N'Merge conflicts'),
(N'ChatEvent.MergeRequestClosed', N'Merge/pull request closed'),
(N'ChatEvent.MergeRequestMerged', N'Merge/pull request merged'),
(N'ChatEvent.MergeRequestOpened', N'Merge/pull request opened'),
(N'ChatEvent.StatusChanged', N'Status changed'),
(N'ChatEvent.TaskAssigned', N'Task assigned'),
(N'ChatEvent.TaskUpdated', N'Other task changes'),
(N'Client.Menu', N'Client'),
(N'ClientGrid.Active', N'Active'),
(N'ClientGrid.ContactPerson', N'Contact Person'),
(N'ClientGrid.Email', N'Email'),
(N'ClientGrid.Name', N'Name'),
(N'ClientGrid.PhoneNumber', N'Phone Number'),
(N'ClientModel.Active', N'Active'),
(N'ClientModel.ContactPerson', N'Contact Person'),
(N'ClientModel.ContactPerson.MaxLengthMsg', N'The length of contact person must be 100 characters or fewer'),
(N'ClientModel.Description', N'Description'),
(N'ClientModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'ClientModel.Email', N'Email'),
(N'ClientModel.Email.InvalidEmailMsg', N'Invalid email address'),
(N'ClientModel.Email.MaxLengthMsg', N'The length of email must be 250 characters or fewer'),
(N'ClientModel.Name', N'Name'),
(N'ClientModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'ClientModel.Name.RequiredMsg', N'Name is required'),
(N'ClientModel.Name.UniqueMsg', N'Name already exists!'),
(N'ClientModel.PhoneNumber', N'Phone Number'),
(N'ClientModel.PhoneNumber.MaxLengthMsg', N'The length of phone no must be 100 characters or fewer'),
(N'ClientModel.WebSite', N'Website'),
(N'ClientModel.WebSite.MaxLengthMsg', N'The length of website must be 750 characters or fewer'),
(N'ClientPage.Title', N'Client'),
(N'ClosingComment.AddBelow', N'add below'),
(N'ClosingComment.AlreadyAdded', N'already added'),
(N'ClosingComment.BeforeMoving', N'Before moving to'),
(N'ClosingComment.GitLabUnreachable', N'The Git server could not be reached. Enter the merge/pull request number by hand.'),
(N'ClosingComment.LinkedToTask', N'Found for this task'),
(N'ClosingComment.MrNotListed', N'MR not listed? Enter its number'),
(N'ClosingComment.MrNumberPlaceholder', N'e.g. 128'),
(N'ClosingComment.NothingRecorded', N'No root cause, resolution or merge request has been recorded.'),
(N'ClosingComment.PickMr', N'Merge request'),
(N'ClosingComment.SaveAndMove', N'Save & move to'),
(N'ClosingComment.Title', N'Closing details'),
(N'ClosingCommentModel.MergeRequestId', N'Merge Request'),
(N'ClosingCommentModel.MergeRequestId.RequiredMsg', N'Pick a merge request or enter its number.'),
(N'ClosingCommentModel.ResolutionDetails', N'Resolution'),
(N'ClosingCommentModel.ResolutionDetails.RequiredMsg', N'Resolution is required for this status.'),
(N'ClosingCommentModel.RootCauseAnalysis.RequiredMsg', N'Root cause is required for this status.'),
(N'Configuration.Menu', N'Configuration'),
(N'ConfigurationPage.Title', N'Configuration'),
(N'Confirmation.Delete', N'Are you sure you want to delete?'),
(N'CustomField.Title', N'Custom Field'),
(N'CustomFieldGrid.ColumnClass', N'Column Width'),
(N'CustomFieldGrid.FieldType', N'Type'),
(N'CustomFieldGrid.Label', N'Label'),
(N'CustomFieldGrid.Mandatory', N'Mandatory'),
(N'CustomFieldGrid.Placement', N'Placement'),
(N'CustomFieldGrid.ResourceKey', N'Resource Key'),
(N'CustomFieldModel.ColumnClass', N'Column Width'),
(N'CustomFieldModel.ColumnClass.RequiredMsg', N'Column width is required'),
(N'CustomFieldModel.FieldType', N'Type'),
(N'CustomFieldModel.FieldType.RequiredMsg', N'Type is required'),
(N'CustomFieldModel.Label', N'Label'),
(N'CustomFieldModel.Label.MaxLengthMsg', N'The length of label must be 100 characters or fewer'),
(N'CustomFieldModel.Label.RequiredMsg', N'Label is required'),
(N'CustomFieldModel.Label.UniqueMsg', N'Label already exists'),
(N'CustomFieldModel.Mandatory', N'Mandatory'),
(N'CustomFieldModel.Options', N'Options (coma seperated)'),
(N'CustomFieldModel.Placement', N'Placement'),
(N'CustomFieldModel.Placement.RequiredMsg', N'Placement is required'),
(N'CustomFieldModel.ResourceKey', N'Resource Key'),
(N'CustomFieldModel.ResourceKey.RequiredMsg', N'Resource key is required'),
(N'Dashboard.AllProjects', N'All Projects'),
(N'Dashboard.AssigneeWorkload', N'Assignee Workload'),
(N'Dashboard.CreatedVsResolved', N'Created vs Resolved'),
(N'Dashboard.Last180', N'Last 180 days'),
(N'Dashboard.Last30', N'Last 30 days'),
(N'Dashboard.Last90', N'Last 90 days'),
(N'Dashboard.MyDashboard', N'My Dashboard'),
(N'Dashboard.MyDueTasks', N'My Due Tasks'),
(N'Dashboard.NoData', N'No data to show'),
(N'Dashboard.OpenByProject', N'Open Tasks by Project'),
(N'Dashboard.OrgDashboard', N'Org Dashboard'),
(N'Dashboard.Overview', N'Overview'),
(N'Dashboard.ReleaseProgress', N'Release Progress'),
(N'DashboardPage.Title', N'Dashboard'),
(N'EmailAccount.Menu', N'Email Account'),
(N'EmailAccountGrid.Active', N'Active'),
(N'EmailAccountGrid.EnableSsl', N'Enable Ssl'),
(N'EmailAccountGrid.FromEmail', N'From Email'),
(N'EmailAccountGrid.FromName', N'From Name'),
(N'EmailAccountGrid.Host', N'Host'),
(N'EmailAccountGrid.Name', N'Name'),
(N'EmailAccountModel.Active', N'Active'),
(N'EmailAccountModel.Description', N'Description'),
(N'EmailAccountModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'EMAILACCOUNTMODEL.EMAILACCOUNT', N'Account'),
(N'EMAILACCOUNTMODEL.EMAILBODY', N'Body'),
(N'EMAILACCOUNTMODEL.EMAILSUBJECT', N'Subject'),
(N'EmailAccountModel.EnableSsl', N'Enable Ssl'),
(N'EmailAccountModel.FromEmail', N'From Email'),
(N'EmailAccountModel.FromEmail.InvalidEmailMsg', N'Invalid email address'),
(N'EmailAccountModel.FromEmail.MaxLengthMsg', N'The length of from email must be 250 characters or fewer'),
(N'EmailAccountModel.FromEmail.RequiredMsg', N'Frome mail is required'),
(N'EmailAccountModel.FromName', N'From Name'),
(N'EmailAccountModel.FromName.MaxLengthMsg', N'The length of from name must be 250 characters or fewer'),
(N'EmailAccountModel.FromName.RequiredMsg', N'From name is required'),
(N'EmailAccountModel.Host', N'Host'),
(N'EmailAccountModel.Host.MaxLengthMsg', N'Max Length Msg'),
(N'EmailAccountModel.Host.RequiredMsg', N'Host is required'),
(N'EmailAccountModel.Name', N'Name'),
(N'EmailAccountModel.Name.MaxLengthMsg', N'The length of Name must be 100 characters or fewer'),
(N'EmailAccountModel.Name.RequiredMsg', N'Name is required'),
(N'EmailAccountModel.Name.UniqueMsg', N'Email account already exists'),
(N'EmailAccountModel.Password', N'Password'),
(N'EmailAccountModel.Password.KeepHint', N'Leave blank to keep the current password'),
(N'EmailAccountModel.Password.MaxLengthMsg', N'The length of password must be 250 characters or fewer'),
(N'EmailAccountModel.Password.RequiredMsg', N'Password is required'),
(N'EmailAccountModel.Port', N'Port'),
(N'EmailAccountModel.Port.RequiredMsg', N'Port is required'),
(N'EmailAccountModel.UnableToDeleteMsg', N'This email account can''t be deleted since the following email templates is using this..'),
(N'EmailAccountModel.UserName', N'User Name'),
(N'EmailAccountModel.UserName.MaxLengthMsg', N'The length of user name must be 250 characters or fewer'),
(N'EmailAccountModel.UserName.RequiredMsg', N'User name is required'),
(N'EmailAccountPage.Title', N'Email Account'),
(N'EmailTemplate.Menu', N'Email Template'),
(N'EmailTemplate.Preview', N'Preview'),
(N'emailtemplategrid.active', N'Active'),
(N'EmailTemplateGrid.EmailAccount', N'SMTP Account'),
(N'EmailTemplateGrid.EmailSubject', N'Email Subject'),
(N'EmailTemplateGrid.Name', N'Name'),
(N'EmailTemplateModel.DefaultAccount.NotExistMsg', N'No default email account exists, please add at least one email account!'),
(N'EmailTemplateModel.EmailAccount', N'SMTP Account'),
(N'EmailTemplateModel.EmailAccount.RequiredMsg', N'Email account is required'),
(N'EmailTemplateModel.EmailSubject', N'Email Subject'),
(N'EmailTemplateModel.EmailSubject.MaxLengthMsg', N'The length of email subject must be 250 characters or fewer'),
(N'EmailTemplateModel.EmailSubject.RequiredMsg', N'Sbject is required'),
(N'EmailTemplateModel.Name', N'Name'),
(N'EmailTemplateModel.Name.MaxLengthMsg', N'The length of Name must be 100 characters or fewer'),
(N'EmailTemplateModel.Name.RequiredMsg', N'Name is required'),
(N'EmailTemplateModel.Name.UniqueMsg', N'Email template already exists'),
(N'EmailTemplatePage.Title', N'Email Template'),
(N'EmptyState.AccessDenied.Text', N'Your role doesn''t include this page. If you need it, ask your administrator to update your permissions.'),
(N'EmptyState.AccessDenied.Title', N'You don''t have access to this page'),
(N'EmptyState.Branches.Empty.Title', N'All branches linked'),
(N'EmptyState.Error.Details', N'Technical details'),
(N'EmptyState.Error.Reference', N'Reference'),
(N'EmptyState.Error.Text', N'An unexpected error stopped this page from loading. Try again; if it keeps happening, share the reference below with your administrator.'),
(N'EmptyState.Error.Title', N'Something went wrong'),
(N'EmptyState.Git.Action', N'Add Git connection'),
(N'EmptyState.Git.AskAdmin', N'Ask an administrator to connect GitHub or GitLab.'),
(N'EmptyState.Git.ConnectText', N'Connect your own Git account to see your merge/pull requests and reviews here.'),
(N'EmptyState.Git.ShortText', N'Connect GitHub or GitLab to see your merge/pull requests and reviews here.'),
(N'EmptyState.Git.Step1', N'An administrator adds a Git connection (Configuration → Git Connections).'),
(N'EmptyState.Git.Step2', N'Each project is linked to its repositories (Project → Repositories).'),
(N'EmptyState.Git.Step3', N'Everyone connects their own account under My profile → Git connections.'),
(N'EmptyState.Git.Text', N'Merge and pull requests from your projects show up here, so you can approve, comment and merge without leaving Taskist.'),
(N'EmptyState.Git.Title', N'Connect GitHub or GitLab to start reviewing'),
(N'EmptyState.Git.Unreachable', N'The Git server could not be reached. Try again in a moment.'),
(N'EmptyState.GoBack', N'Go back'),
(N'EmptyState.GoDashboard', N'Go to dashboard'),
(N'EmptyState.Grid.ClearSearch', N'Clear search'),
(N'EmptyState.Grid.Empty.Text', N'Records you add will appear here.'),
(N'EmptyState.Grid.Empty.Title', N'Nothing here yet'),
(N'EmptyState.Grid.NoMatch.Text', N'Nothing matches your search or filters.'),
(N'EmptyState.Grid.NoMatch.Title', N'No results'),
(N'EmptyState.NoData.Text', N'We couldn''t find what you were looking for. It may have been removed, or the link is out of date.'),
(N'EmptyState.NoData.Title', N'Nothing to show'),
(N'EmptyState.NoProject.Action', N'Create a project'),
(N'EmptyState.NoProject.Text', N'You are not a member of any project yet. Ask a project manager or administrator to add you to one.'),
(N'EmptyState.NoProject.Title', N'No project available'),
(N'EmptyState.NotFound.Text', N'The page you are looking for does not exist or may have moved.'),
(N'EmptyState.NotFound.Title', N'Page not found'),
(N'EmptyState.ProjectAccessDenied.Text', N'You are not a member of this project. Ask its project manager or an administrator to add you.'),
(N'EmptyState.Reviews.Empty.Title', N'All caught up'),
(N'EmptyState.Reviews.NoneMatch.Title', N'No matches'),
(N'EmptyState.Reviews.NoProjects.Title', N'No projects to review yet'),
(N'EmptyState.SaveFirst.Title', N'Save to continue'),
(N'EmptyState.TryAgain', N'Try again'),
(N'EmptyState.Widget.NoData', N'Try a longer period or a different project.'),
(N'EmptyState.Wiki.Text', N'Pick a page from the tree on the left, or add a new one to start documenting.'),
(N'EmptyState.Wiki.Title', N'Select a page'),
(N'Error.Failed', N'Unable to process the request'),
(N'Error.ProjectAccessDenied', N'You don’t have access to the project {0}. Please contact Support for assistance.'),
(N'Error.UnableToCreateTask', N'Unable To Create Task'),
(N'Error.UnableToRegisterUser', N'Unable To Register User'),
(N'Error.UnableToUpdateUser', N'Unable To Update User'),
(N'ErrorPage.Title', N'Internal Server Error!'),
(N'Filter.Toggle', N'Filters'),
(N'FormNoData.Description', N'We are not able to find the data matching the criteria.'),
(N'FormNoData.Title', N'No data!'),
(N'GitAuthMode.AccessToken', N'Access token'),
(N'GitAuthMode.GitHubApp', N'GitHub App (recommended for GitHub)'),
(N'GitConnection.ReEncrypted', N'{0} records re-encrypted.'),
(N'GitConnection.Verified', N'Connection saved. Service account: {0}'),
(N'GitConnection.VerifyFailed', N'The service credentials could not be verified.'),
(N'GitConnectionGrid.Active', N'Active'),
(N'GitConnectionGrid.AuthMode', N'Authentication'),
(N'GitConnectionGrid.BaseUrl', N'URL'),
(N'GitConnectionGrid.IsDefault', N'Default'),
(N'GitConnectionGrid.Name', N'Name'),
(N'GitConnectionGrid.OAuth', N'OAuth'),
(N'GitConnectionGrid.Provider', N'Provider'),
(N'GitConnectionGrid.ServiceAccount', N'Service account'),
(N'GitConnectionModel.Active', N'Active'),
(N'GitConnectionModel.AllowInsecureHttp', N'Allow plain HTTP / localhost (development only)'),
(N'GitConnectionModel.ApiUrl', N'API URL (optional)'),
(N'GitConnectionModel.ApiUrl.Hint', N'Leave empty to use the default (api.github.com, /api/v3 for GitHub Enterprise, /api/v4 for GitLab).'),
(N'GitConnectionModel.ApiUrl.Hint.GitHub', N'Leave empty to use the default (api.github.com, or /api/v3 for GitHub Enterprise).'),
(N'GitConnectionModel.ApiUrl.Hint.GitLab', N'Leave empty to use the default (/api/v4).'),
(N'GitConnectionModel.AppCredentials.RequiredMsg', N'Enter the GitHub App id and private key — they are used to verify the connection before saving.'),
(N'GitConnectionModel.AppId', N'GitHub App id'),
(N'GitConnectionModel.AppPrivateKey', N'GitHub App private key (PEM)'),
(N'GitConnectionModel.AppPrivateKey.Hint', N'Recommended for GitHub: install the app only on the repositories Taskist needs (Contents read, Pull requests read & write, Issues read & write, Metadata read). Short-lived installation tokens are created on demand and never stored.'),
(N'GitConnectionModel.AuthMode', N'Service authentication'),
(N'GitConnectionModel.AuthMode.GitHubOnlyMsg', N'GitHub App authentication is only available for GitHub connections'),
(N'GitConnectionModel.BaseUrl', N'Server URL'),
(N'GitConnectionModel.BaseUrl.RequiredMsg', N'Server URL is required'),
(N'GitConnectionModel.ClearOAuth', N'Remove the OAuth app settings'),
(N'GitConnectionModel.IsDefault', N'Default connection'),
(N'GitConnectionModel.Name', N'Name'),
(N'GitConnectionModel.Name.RequiredMsg', N'Name is required'),
(N'GitConnectionModel.OAuth.Hint', N'Optional: register an OAuth app (GitHub) or application (GitLab, scope api) so users can connect with one click instead of pasting a token. Callback URL:'),
(N'GitConnectionModel.OAuth.Hint.GitHub', N'Optional: register a GitHub OAuth app so users can connect with one click instead of pasting a token. Callback URL:'),
(N'GitConnectionModel.OAuth.Hint.GitLab', N'Optional: register a GitLab application (scope api) so users can connect with one click instead of pasting a token. Callback URL:'),
(N'GitConnectionModel.OAuthClientId', N'OAuth client id (optional)'),
(N'GitConnectionModel.OAuthClientSecret', N'OAuth client secret'),
(N'GitConnectionModel.ProviderType', N'Provider'),
(N'GitConnectionModel.SecretSaved', N'•••••••• saved — leave empty to keep'),
(N'GitConnectionModel.ServiceAccount', N'Verified service account:'),
(N'GitConnectionModel.ServiceToken', N'Service access token'),
(N'GitConnectionModel.ServiceToken.Hint', N'Used only to read, receive webhooks, assign reviewers and sync issues. GitLab: a project/group access token (bot) with read_api, or api for issue sync. GitHub: a fine-grained token limited to the repositories. Leave empty to keep the saved token.'),
(N'GitConnectionModel.ServiceToken.Hint.GitHub', N'Used only to read, receive webhooks, assign reviewers and sync issues: a fine-grained token limited to the repositories. Leave empty to keep the saved token.'),
(N'GitConnectionModel.ServiceToken.Hint.GitLab', N'Used only to read, receive webhooks, assign reviewers and sync issues: a project/group access token (bot) with read_api, or api for issue sync. Leave empty to keep the saved token.'),
(N'GitConnectionModel.ServiceToken.RequiredMsg', N'Enter a service access token — it is used to verify the connection before saving.'),
(N'GitConnectionPage.ReEncrypt', N'Re-encrypt stored secrets'),
(N'GitConnectionPage.ReEncryptConfirm', N'Re-encrypt every stored Git token, webhook secret and e-mail password with the current key ring?'),
(N'GitConnectionPage.SecurityNote', N'Service tokens, app private keys and OAuth secrets are encrypted with the ASP.NET Core Data Protection key ring and are never shown again after saving. Keep the key ring folder backed up.'),
(N'GitConnectionPage.Title', N'Git connections'),
(N'Grid.Actions', N'Actions'),
(N'Grid.FooterInfo', N'Showing: Page (_PAGE_ of _PAGES_) Total Tasks: (_START_ to _END_ of _TOTAL_)'),
(N'Grid.FooterInfoWhenEmpty', N'No records available'),
(N'Grid.LengthChangeLabel', N'Show'),
(N'Grid.SearchLabel', N'Filter'),
(N'Grid.SearchPlaceholder', N'Type to filter...'),
(N'Grid.ZeroRecords', N'Nothing found'),
(N'Header.Activity', N'Activity'),
(N'Header.Alerts', N'Alerts'),
(N'Header.AllClear', N'You''re all caught up'),
(N'Header.Create', N'Create'),
(N'Header.JustNow', N'now'),
(N'Header.MarkAllRead', N'Mark all read'),
(N'Header.NewTask', N'New Task'),
(N'Header.NewWiki', N'New Wiki'),
(N'Header.NoActivity', N'No activity yet.'),
(N'Header.NoResults', N'No results'),
(N'Header.Notifications', N'Notifications'),
(N'Header.OverdueTasks', N'overdue task(s)'),
(N'Header.SearchPlaceholder', N'Search tasks, people...'),
(N'HeaderMenu.ChangePassword', N'Change Password'),
(N'HeaderMenu.DarkMode', N'Dark mode'),
(N'HeaderMenu.LightMode', N'Light mode'),
(N'HeaderMenu.Logout', N'Logout'),
(N'HeaderMenu.MyProfile', N'My Profile'),
(N'HeaderMenu.ResetCache', N'Reset Cache'),
(N'Integrations.Menu', N'Integrations'),
(N'IssueSyncMode.Export', N'Publish tasks as issues'),
(N'IssueSyncMode.Import', N'Import issues into Taskist'),
(N'IssueSyncMode.Off', N'Off'),
(N'IssueSyncMode.TwoWay', N'Two-way sync'),
(N'Language.Menu', N'Language'),
(N'LanguageGrid.Active', N'Active'),
(N'LanguageGrid.DisplayName', N'Display Name'),
(N'LanguageGrid.DisplayOrder', N'Display Order'),
(N'LanguageGrid.LanguageCulture', N'Culture'),
(N'LanguageGrid.Name', N'Name'),
(N'LanguageGrid.Rtl', N'RTL'),
(N'LanguageModel.Active', N'Active'),
(N'LanguageModel.DisplayName', N'Display Name'),
(N'LanguageModel.DisplayOrder', N'Display Order'),
(N'LanguageModel.DisplayOrder.RequiredMsg', N'Display order is required'),
(N'LanguageModel.LanguageCulture', N'Culture'),
(N'LanguageModel.LanguageCulture.MaxLengthMsg', N'The length of Culture must be 10 characters or fewer'),
(N'LanguageModel.LanguageCulture.RequiredMsg', N'Culture is required'),
(N'LanguageModel.LanguageCulture.UniqueMsg', N'Culture already exists'),
(N'LanguageModel.Name', N'Name'),
(N'LanguageModel.Name.MaxLengthMsg', N'The length of Name must be 100 characters or fewer'),
(N'LanguageModel.Name.RequiredMsg', N'Name is required'),
(N'LanguageModel.Name.UniqueMsg', N'Language already exists'),
(N'LanguageModel.Rtl', N'RTL'),
(N'LanguagePage.LanguageTabTitle', N'Details'),
(N'LanguagePage.ResourceTabTitle', N'Resources'),
(N'LanguagePage.SaveToAddResourceMsg', N'You need to save the language before you can add resource for this language page.'),
(N'LanguagePage.Title', N'Language'),
(N'LocaleResourceModel.ResourceKey', N'Resource Key'),
(N'LocaleResourceModel.ResourceKey.MaxLengthMsg', N'The length of Resource Key must be 150 characters or fewer'),
(N'LocaleResourceModel.ResourceKey.RequiredMsg', N'Resource Key is required'),
(N'LocaleResourceModel.ResourceKey.UniqueMsg', N'Resource Key already exists'),
(N'LocaleResourceModel.ResourceValue', N'Resource Value'),
(N'LocaleResourceModel.ResourceValue.MaxLengthMsg', N'The length of Resource Value must be 100 characters or fewer'),
(N'LocaleResourceModel.ResourceValue.RequiredMsg', N'Resource Value is required'),
(N'Log.Action', N'Action'),
(N'Log.ActivityTab', N'Activity'),
(N'Log.All', N'All'),
(N'Log.AuditTab', N'Audit (data changes)'),
(N'Log.Comment', N'Detail'),
(N'Log.Entity', N'Entity'),
(N'Log.Field', N'Field'),
(N'Log.From', N'From'),
(N'Log.NewValue', N'New value'),
(N'Log.NoChanges', N'No field changes recorded.'),
(N'Log.OldValue', N'Old value'),
(N'Log.To', N'To'),
(N'Log.User', N'User'),
(N'Log.ViewChanges', N'View'),
(N'Log.ViewRaw', N'View raw data'),
(N'Log.When', N'When'),
(N'Message.DeleteSuccess', N'Deleted successfully'),
(N'Message.SaveSuccess', N'Saved successfully'),
(N'Message.UpdateSuccess', N'Updated successfully'),
(N'ModuleGrid.Active', N'Active'),
(N'ModuleGrid.Description', N'Description'),
(N'ModuleGrid.Name', N'Name'),
(N'ModuleModel.Active', N'Active'),
(N'ModuleModel.Description', N'Description'),
(N'ModuleModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'ModuleModel.Name', N'Name'),
(N'ModuleModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'ModuleModel.Name.RequiredMsg', N'Name is required'),
(N'ModuleModel.Name.UniqueMsg', N'Name already exists!'),
(N'ModuleModel.Project', N'Project'),
(N'ModulePage.Title', N'Module'),
(N'MyCode.Authored', N'My merge requests'),
(N'MyCode.Branches', N'Branches without a merge request'),
(N'MyCode.Empty', N'No open merge requests, reviews or pending branches.'),
(N'MyCode.LoadedAt', N'Updated {0}'),
(N'MyCode.NoAuthored', N'No open merge requests.'),
(N'MyCode.NoReviewer', N'No reviewer'),
(N'MyCode.NoReviewing', N'Nothing waiting for your review.'),
(N'MyCode.OpenQueue', N'Review queue'),
(N'MyCode.Refresh', N'Refresh from GitLab'),
(N'MyCode.Reviewing', N'Waiting for my review'),
(N'MyCode.Title', N'My code'),
(N'NotificationChannelGrid.Active', N'Active'),
(N'NotificationChannelGrid.LastError', N'Last error'),
(N'NotificationChannelGrid.LastSent', N'Last sent'),
(N'NotificationChannelGrid.Name', N'Name'),
(N'NotificationChannelGrid.Type', N'Type'),
(N'NotificationChannelModel.Active', N'Active'),
(N'NotificationChannelModel.ChannelType', N'Type'),
(N'NotificationChannelModel.ChannelType.Hint', N'Teams flow (person) sends a direct message to each affected person through a Power Automate flow; every other type posts one message to a channel.'),
(N'NotificationChannelModel.EndpointUrl', N'Webhook URL'),
(N'NotificationChannelModel.EndpointUrl.Hint', N'The incoming-webhook address from the chat service. It works like a password: it is stored encrypted and never shown again. Leave empty to keep the saved one.'),
(N'NotificationChannelModel.EndpointUrl.RequiredMsg', N'Enter the webhook URL.'),
(N'NotificationChannelModel.LastError', N'Last delivery failed:'),
(N'NotificationChannelModel.LastSentOn', N'Last message sent:'),
(N'NotificationChannelModel.Name', N'Name'),
(N'NotificationChannelModel.Name.RequiredMsg', N'Enter a name.'),
(N'NotificationChannelModel.SecretSaved', N'Saved (hidden). Type to replace.'),
(N'NotificationChannelModel.SigningSecret', N'Signing secret'),
(N'NotificationChannelModel.SigningSecret.Hint', N'Optional. When set, each request carries an X-Taskist-Signature-256 header (HMAC-SHA256 of the body) so your endpoint can verify it came from Taskist.'),
(N'NotificationChannelModel.Test', N'Send test message'),
(N'NotificationChannelModel.Test.Hint', N'Sends a test message using the saved settings. Save your changes first.'),
(N'NotificationChannelPage.Intro', N'Chat channels that receive task and merge/pull request notifications. Add a channel here once, then pick it per project under Project → Notifications and choose which events it gets.'),
(N'NotificationChannelPage.Title', N'Notification channels'),
(N'NotificationChannelType.Discord', N'Discord channel'),
(N'NotificationChannelType.GenericJson', N'Generic JSON webhook'),
(N'NotificationChannelType.GoogleChat', N'Google Chat space'),
(N'NotificationChannelType.Mattermost', N'Mattermost channel'),
(N'NotificationChannelType.SlackChannel', N'Slack channel'),
(N'NotificationChannelType.TeamsChannel', N'Microsoft Teams channel (Workflows)'),
(N'NotificationChannelType.TeamsFlowPerson', N'Microsoft Teams flow (person)'),
(N'Portfolio.Menu', N'Portfolio'),
(N'Profile.Appearance.Accent', N'Accent colour'),
(N'Profile.Appearance.Accent.blue', N'Blue'),
(N'Profile.Appearance.Accent.green', N'Green'),
(N'Profile.Appearance.Accent.indigo', N'Indigo'),
(N'Profile.Appearance.Accent.orange', N'Orange'),
(N'Profile.Appearance.Accent.purple', N'Purple'),
(N'Profile.Appearance.Accent.rose', N'Rose'),
(N'Profile.Appearance.Accent.teal', N'Teal'),
(N'Profile.Appearance.Mode', N'Mode'),
(N'Profile.Appearance.Mode.auto', N'Match my system'),
(N'Profile.Appearance.Mode.dark', N'Dark'),
(N'Profile.Appearance.Mode.light', N'Light'),
(N'Profile.Appearance.Saved', N'Appearance saved.'),
(N'Profile.Appearance.Title', N'Appearance'),
(N'Profile.ApplyPhoto', N'Apply'),
(N'Profile.ChangePassword', N'Change Password'),
(N'Profile.ChangePhoto', N'Change photo'),
(N'Profile.CropHint', N'Drag to reposition · scroll or use the slider to zoom'),
(N'Profile.CropPhoto', N'Adjust photo'),
(N'Profile.Email', N'Email'),
(N'Profile.FirstName', N'First Name'),
(N'Profile.FirstName.MaxLengthMsg', N'First name cannot exceed 50 characters'),
(N'Profile.FirstName.RequiredMsg', N'First name is required'),
(N'Profile.FriendlyName', N'Friendly Name'),
(N'Profile.Git.ConnectedWithOAuth', N'Connected with OAuth; access is renewed automatically.'),
(N'Profile.Git.ConnectWithOAuth', N'Connect with {0}'),
(N'Profile.Git.Empty', N'No Git server is set up yet. An administrator can add one under Configuration → Git Connections.'),
(N'Profile.Git.Guide.Scopes', N'Give the token these permissions'),
(N'Profile.Git.Intro', N'Connect your own GitHub / GitLab account so branches, merge/pull requests, reviews and merges are done in your name.'),
(N'Profile.Git.OAuthDenied', N'Access was not granted.'),
(N'Profile.Git.OAuthHint', N'You will be asked to approve access on the Git server, then come straight back here.'),
(N'Profile.Git.OAuthInvalid', N'The sign-in attempt expired or did not match. Please try again.'),
(N'Profile.Git.OrToken', N'Or connect with a personal access token:'),
(N'Profile.Git.Title', N'Git connections'),
(N'Profile.GitLab.Connect', N'Connect'),
(N'Profile.GitLab.ConnectedAs', N'Connected as'),
(N'Profile.GitLab.Disconnect', N'Disconnect'),
(N'Profile.GitLab.DisconnectConfirm', N'Disconnect your GitLab account? You will not be able to create branches from Taskist until you connect again.'),
(N'Profile.GitLab.Disconnected', N'Git account disconnected.'),
(N'Profile.GitLab.Expired', N'Token expired'),
(N'Profile.GitLab.ExpiredOn', N'Token expired on'),
(N'Profile.GitLab.ExpiresOn', N'Token expires on'),
(N'Profile.GitLab.Guide.Step1.Text', N'Sign in to GitHub or GitLab as yourself and create a new personal access token. The button below opens that page with the name and scope filled in where the server supports it. Set an expiry date.'),
(N'Profile.GitLab.Guide.Step1.Title', N'Open your access tokens page'),
(N'Profile.GitLab.Guide.Step4.Text', N'Grant only these permissions; nothing else is needed.'),
(N'Profile.GitLab.Guide.Step5.Note', N'GitLab shows the token only once. If you lose it, delete it in GitLab and create a new one.'),
(N'Profile.GitLab.Guide.Step5.Text', N'Create the token, copy it, paste it below and click Connect.'),
(N'Profile.GitLab.Guide.Step5.Title', N'Create, copy and paste'),
(N'Profile.GitLab.Manage', N'Manage'),
(N'Profile.GitLab.NoExpiry', N'Token has no expiry date.'),
(N'Profile.GitLab.NotConnected', N'Not connected'),
(N'Profile.GitLab.OpenTokenPage', N'Open the GitLab token page'),
(N'Profile.GitLab.ReplacePlaceholder', N'Paste a new token to replace the current one'),
(N'Profile.GitLab.Requirements.User', N'The token must belong to your own Git account:'),
(N'Profile.GitLab.StoredEncrypted', N'Stored encrypted and used only for actions you take in Taskist. Nobody else, including administrators, can see it.'),
(N'Profile.GitLab.TokenPlaceholder', N'Paste your personal access token'),
(N'Profile.GitLab.Why', N'Taskist creates branches, merge/pull requests and reviews with your own account, so the Git server records you as the author and checks your own permissions. Follow these steps once:'),
(N'Profile.InvalidImage', N'Please choose an image up to 2 MB.'),
(N'Profile.LastName', N'Last Name'),
(N'Profile.LastName.MaxLengthMsg', N'Last name cannot exceed 50 characters'),
(N'Profile.LastName.RequiredMsg', N'Last name is required'),
(N'Profile.MaritalStatus', N'Marital Status'),
(N'Profile.Mobile', N'Mobile'),
(N'Profile.Mobile.InvalidMsg', N'Enter a valid 10-digit mobile number'),
(N'Profile.Mobile.RequiredMsg', N'Mobile number is required'),
(N'Profile.RemovePhoto', N'Remove photo'),
(N'Profile.Rotate', N'Rotate'),
(N'Profile.Save', N'Save'),
(N'Profile.Section.Details', N'Personal details'),
(N'Profile.Section.Unsaved', N'Unsaved changes'),
(N'Profile.Security', N'Security'),
(N'Profile.Security.PasswordHint', N'Change the password you use to sign in to Taskist.'),
(N'Profile.ZoomIn', N'Zoom in'),
(N'Profile.ZoomOut', N'Zoom out'),
(N'ProfilePage.Title', N'My Profile'),
(N'Project.Menu', N'Project'),
(N'ProjectAccessDenied.Title', N'Project Access Denied'),
(N'ProjectGrid.Active', N'Active'),
(N'ProjectGrid.ClientName', N'Client'),
(N'ProjectGrid.EndDate', N'End Date'),
(N'ProjectGrid.Name', N'Name'),
(N'ProjectGrid.StartDate', N'Start Date'),
(N'projectmembergrid.canaddwiki', N'Can Add Wiki'),
(N'ProjectMemberGrid.CanChangeProject', N'Can Change Project'),
(N'ProjectMemberGrid.CanClose', N'Can Close'),
(N'ProjectMemberGrid.CanComment', N'Can Comment'),
(N'ProjectMemberGrid.CanDeleteTask', N'Can Delete Task'),
(N'ProjectMemberGrid.CanEdit', N'Can Edit'),
(N'ProjectMemberGrid.CanEditOthersTask', N'Can Edit Others Task'),
(N'ProjectMemberGrid.CanMergeMergeRequests', N'Merge MRs'),
(N'ProjectMemberGrid.CanReopen', N'Can Reopen'),
(N'ProjectMemberGrid.CanReportBug', N'Can Report Bug'),
(N'ProjectMemberGrid.CanReportCR', N'Can Report CR'),
(N'ProjectMemberGrid.CanReportToDo', N'Can Report To Do'),
(N'ProjectMemberGrid.CanReviewMergeRequests', N'Review MRs'),
(N'ProjectMemberGrid.CanViewOthersTask', N'Can View Others Task'),
(N'ProjectMemberGrid.UserName', N'Member'),
(N'ProjectMemberModel.Title', N'Members'),
(N'ProjectMemberModel.User.RequiredMsg', N'Member is required'),
(N'ProjectMemberModel.User.UniqueMsg', N'Member already exists'),
(N'ProjectModel.Active', N'Active'),
(N'ProjectModel.Client', N'Client'),
(N'ProjectModel.CodeReviewer', N'Code Reviewer'),
(N'ProjectModel.Description', N'Description'),
(N'ProjectModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'ProjectModel.EndDate', N'End Date'),
(N'ProjectModel.GitProjectReference', N'Git Project Reference'),
(N'ProjectModel.Name', N'Name'),
(N'ProjectModel.Name.Hint', N'പേരൠdfgdfgfdgfdg '),
(N'ProjectModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'ProjectModel.Name.RequiredMsg', N'Name is required'),
(N'ProjectModel.Name.UniqueMsg', N'Name already exists!'),
(N'ProjectModel.ProjectManager', N'Project Manager'),
(N'ProjectModel.ReleaseFullIncrement', N'Full release bumps'),
(N'ProjectModel.ReleaseFullIncrement.Default', N'Default'),
(N'ProjectModel.ReleaseVersionFormat', N'Release version format'),
(N'ProjectModel.ReleaseVersionFormat.Hint', N'Tokens: {major} {minor} {patch} {seq} {yyyy} {yy} {MM} {dd}; other text is kept as-is, e.g. v{major}.{minor}.{patch} or {yyyy}.{MM}.{seq}. Leave blank to use the default format.'),
(N'ProjectModel.ReleaseVersionFormat.InvalidMsg', N'Invalid version format. Use at least one of {major}, {minor}, {patch}, {seq}; each token once; only the supported tokens.'),
(N'ProjectModel.ReleaseVersionPreview.Full', N'Next full:'),
(N'ProjectModel.ReleaseVersionPreview.Patch', N'next patch:'),
(N'ProjectModel.StartDate', N'Start Date'),
(N'ProjectModel.TeamLead', N'Team Lead'),
(N'ProjectNotificationChannel.Duplicate', N'This channel is already added to the project.'),
(N'ProjectNotificationChannelModel.Active', N'Active'),
(N'ProjectNotificationChannelModel.Events', N'Events'),
(N'ProjectNotificationChannelModel.Events.RequiredMsg', N'Tick at least one event.'),
(N'ProjectNotificationChannelModel.Intro', N'Choose the chat channels for this project and which events each one receives.'),
(N'ProjectNotificationChannelModel.NoChannels', N'No notification channel exists yet. An administrator can add one under Configuration → Notification Channels.'),
(N'ProjectNotificationChannelModel.NotificationChannelId', N'Channel'),
(N'ProjectNotificationChannelModel.NotificationChannelId.RequiredMsg', N'Select an active channel.'),
(N'ProjectNotificationChannelModel.SelectChannel', N'Select a channel'),
(N'ProjectNotificationChannelModel.Title', N'Notifications'),
(N'ProjectNotificationGrid.Active', N'Active'),
(N'ProjectNotificationGrid.Channel', N'Channel'),
(N'ProjectNotificationGrid.Events', N'Events'),
(N'ProjectNotificationGrid.Type', N'Type'),
(N'ProjectPage.CustomFieldTabTitle', N'Custom Fields'),
(N'ProjectPage.GitLabWebhook.Copied', N'Webhook URL copied'),
(N'ProjectPage.GitLabWebhook.Copy', N'Copy'),
(N'ProjectPage.MemberTabTitle', N'Members'),
(N'ProjectPage.NotificationTabTitle', N'Notifications'),
(N'ProjectPage.ProjectTabTitle', N'Project Details'),
(N'ProjectPage.RepositoryTabTitle', N'Repositories'),
(N'ProjectPage.SaveToAddCustomFieldMsg', N'Save To Add Custom Field Msg'),
(N'ProjectPage.SaveToAddMemberMsg', N'You need to save the project details before you can add members.'),
(N'ProjectPage.SaveToAddNotificationMsg', N'Save the project first to choose its notification channels.'),
(N'ProjectPage.SaveToAddRepositoryMsg', N'Save the project first, then link its repositories.'),
(N'ProjectPage.Title', N'Project'),
(N'ProjectRepository.Added', N'Repository linked. Open Webhook to connect it.'),
(N'ProjectRepository.IssueSyncHint', N'Off by default. Developer, quality and external notes, attachments and system comments are never sent.'),
(N'ProjectRepository.IssueSyncTitle', N'Issue sync'),
(N'ProjectRepository.NoConnections', N'No Git connection exists yet. An administrator can add one under Configuration → Git connections.'),
(N'ProjectRepository.PublicWarning', N'This repository is public. Anything published to its issues is visible to everyone.'),
(N'ProjectRepository.Webhook', N'Webhook'),
(N'ProjectRepository.Webhook.AutoHint.GitHub', N'Uses your connected GitHub account (repository admin needed). A fresh secret is generated and stored without ever being shown.'),
(N'ProjectRepository.Webhook.AutoHint.GitLab', N'Uses your connected GitLab account (Maintainer needed). A fresh secret is generated and stored without ever being shown.'),
(N'ProjectRepository.Webhook.AutoTitle', N'Create the webhook automatically (recommended)'),
(N'ProjectRepository.Webhook.LastDelivery', N'last delivery'),
(N'ProjectRepository.Webhook.Manual1.GitHub', N'GitHub → repository Settings → Webhooks → Add webhook. Content type: application/json.'),
(N'ProjectRepository.Webhook.Manual1.GitLab', N'GitLab → project Settings → Webhooks → Add new webhook.'),
(N'ProjectRepository.Webhook.Manual2', N'Paste the payload URL above and a new secret generated below.'),
(N'ProjectRepository.Webhook.Manual3.GitHub', N'Events: pushes, pull requests, pull request reviews, issue comments (and issues for issue sync). Keep SSL verification on.'),
(N'ProjectRepository.Webhook.Manual3.GitLab', N'Triggers: push, merge request, comments (and issues for issue sync). Keep SSL verification on.'),
(N'ProjectRepository.Webhook.ManualTitle', N'Or set it up by hand'),
(N'ProjectRepository.Webhook.NoSecret', N'No secret: deliveries are rejected until one is set.'),
(N'ProjectRepository.Webhook.Regenerate', N'Generate a new secret'),
(N'ProjectRepository.Webhook.RegenerateConfirm', N'Generate a new secret? The current webhook stops working until you paste the new secret into it.'),
(N'ProjectRepository.Webhook.Register', N'Create webhook'),
(N'ProjectRepository.Webhook.SecretSet', N'Secret set on'),
(N'ProjectRepository.Webhook.ShownOnce', N'Copy it now: it is shown only once.'),
(N'ProjectRepository.Webhook.Url', N'Payload URL'),
(N'ProjectRepository.WebhookRegistered', N'Webhook created with a new secret.'),
(N'ProjectRepositoryGrid.Active', N'Active'),
(N'ProjectRepositoryGrid.Connection', N'Connection'),
(N'ProjectRepositoryGrid.IssueSync', N'Issue sync'),
(N'ProjectRepositoryGrid.LastDelivery', N'Last webhook'),
(N'ProjectRepositoryGrid.Name', N'Repository'),
(N'ProjectRepositoryGrid.Primary', N'Primary'),
(N'ProjectRepositoryGrid.WebhookSecured', N'Webhook secret'),
(N'ProjectRepositoryModel.Active', N'Active'),
(N'ProjectRepositoryModel.GitConnectionId', N'Git connection'),
(N'ProjectRepositoryModel.GitConnectionId.RequiredMsg', N'Choose a Git connection'),
(N'ProjectRepositoryModel.IsPrimary', N'Primary repository'),
(N'ProjectRepositoryModel.IssueClosedStatusId', N'Status when an issue is closed'),
(N'ProjectRepositoryModel.IssueImportLabel', N'Import label'),
(N'ProjectRepositoryModel.IssueImportLabel.Hint', N'Only issues carrying this label are imported. On GitHub only people with triage access can add labels, so random users cannot create tasks. Leave empty to disable automatic import.'),
(N'ProjectRepositoryModel.IssueImportLimitPerHour', N'Import limit per hour'),
(N'ProjectRepositoryModel.IssueOpenStatusId', N'Status when an issue is opened / reopened'),
(N'ProjectRepositoryModel.IssueSeverityId', N'Severity for imported issues'),
(N'ProjectRepositoryModel.IssueSyncComments', N'Sync comments (only comments ticked "Post to issue" go out)'),
(N'ProjectRepositoryModel.IssueSyncMode', N'Issue sync'),
(N'ProjectRepositoryModel.IssueSyncTaskTypeIds', N'Publish automatically'),
(N'ProjectRepositoryModel.IssueSyncTaskTypeIds.Hint', N'New tasks of these types are published as issues automatically. Leave empty to publish only on request from the task page.'),
(N'ProjectRepositoryModel.IssueSyncUserId', N'Sync user (author of imported items)'),
(N'ProjectRepositoryModel.IssueTaskTypeId', N'Task type for imported issues'),
(N'ProjectRepositoryModel.RepoRef', N'Repository'),
(N'ProjectRepositoryModel.RepoRef.DuplicateMsg', N'This repository is already linked to the project.'),
(N'ProjectRepositoryModel.RepoRef.Hint', N'Search, or type the path: owner/repository on GitHub, group/project (or the numeric id) on GitLab.'),
(N'ProjectRepositoryModel.RepoRef.InvalidMsg', N'The repository path is not valid for this provider.'),
(N'ProjectRepositoryModel.RepoRef.NotFoundMsg', N'The repository was not found or the service credentials cannot see it.'),
(N'ProjectRepositoryModel.RepoRef.RequiredMsg', N'Choose a repository'),
(N'ProjectRepositoryModel.Title', N'Repositories'),
(N'ReleaseCarryOver.InvalidTargetMsg', N'The selected release must be a different planning release available to every project of the open tasks.'),
(N'ReleaseCarryOver.MoveAndRelease', N'Move & release'),
(N'ReleaseCarryOver.MovedMsg', N'Release updated. {0} open task(s) moved to the selected release.'),
(N'ReleaseCarryOver.NoTargets', N'No planning release covers the projects of these tasks. Create one first, or release anyway.'),
(N'ReleaseCarryOver.OpenTasksMsg', N'{0} task(s) in this release are still open. Confirm how to handle them before releasing.'),
(N'ReleaseCarryOver.Prompt', N'{0} task(s) in this release are still open. Move them to another planning release, or release anyway?'),
(N'ReleaseCarryOver.ReleaseAnyway', N'Release anyway'),
(N'ReleaseCarryOver.SelectTarget', N'Select a planning release to move them to'),
(N'ReleaseCarryOver.Title', N'Open tasks in this release'),
(N'ReleaseFilter.FromDate', N'From date'),
(N'ReleaseFilter.ToDate', N'To date'),
(N'ReleaseGrid.AllProjects', N'All projects'),
(N'Releasegrid.Name', N'Version'),
(N'ReleaseGrid.Overdue', N'Overdue'),
(N'ReleaseGrid.Progress', N'Progress'),
(N'ReleaseGrid.Project', N'Project'),
(N'ReleaseGrid.ReleaseDate', N'Release Date'),
(N'ReleaseGrid.ReleaseType', N'Release Type'),
(N'ReleaseGrid.Status', N'Status'),
(N'ReleaseMismatch.AddProject', N'Add {0} to this release'),
(N'ReleaseMismatch.Button', N'Mismatched tasks'),
(N'ReleaseMismatch.ClearAll', N'Clear release from all'),
(N'ReleaseMismatch.Cleared', N'Release cleared on {0} task(s).'),
(N'ReleaseMismatch.ClearSelected', N'Clear release from {0} selected'),
(N'ReleaseMismatch.ConfirmAdd', N'Add {0} to release {1}? Tasks from {0} will then be valid for this release, and it will appear in {0}''s release dropdowns.'),
(N'ReleaseMismatch.ConfirmClear', N'Remove the release from {0} task(s)? This is recorded in each task''s history.'),
(N'ReleaseMismatch.Empty', N'No mismatched tasks. Every task''s release is available for its project.'),
(N'ReleaseMismatch.HideTasks', N'Hide tasks'),
(N'ReleaseMismatch.Intro', N'Each card is a release that has tasks from a project it is not set up for. If those tasks really belong to the release, add the project to the release. If they were tagged by mistake, clear the release from them. Both are recorded.'),
(N'ReleaseMismatch.MappedTo', N'Set up for:'),
(N'ReleaseMismatch.NothingToClear', N'None of the selected tasks still have a mismatched release.'),
(N'ReleaseMismatch.ProjectAdded', N'Project added to the release.'),
(N'ReleaseMismatch.ShowTasks', N'Show tasks'),
(N'ReleaseMismatch.TasksFrom', N'task(s) from'),
(N'ReleaseMismatch.Title', N'Tasks with a release not mapped to their project'),
(N'ReleaseModel.BaseReleaseId', N'Patch of'),
(N'ReleaseModel.BaseReleaseId.Hint', N'Pick an older full release to number a hotfix on its line (e.g. 1.2.x). Leave as Latest release to follow the newest one.'),
(N'ReleaseModel.BaseReleaseId.Latest', N'Latest release'),
(N'ReleaseModel.Deleted', N'Deleted'),
(N'ReleaseModel.Description', N'Description'),
(N'ReleaseModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'ReleaseModel.Name', N'Version'),
(N'ReleaseModel.Name.AutoHint', N'Auto-generated'),
(N'ReleaseModel.Name.AutoTooltip', N'Auto-generate the next version'),
(N'ReleaseModel.Name.DefaultFormat', N'default format'),
(N'ReleaseModel.Name.FormatMismatch', N'Doesn’t follow the version format {0}'),
(N'ReleaseModel.Name.ManualHint', N'Manual — click the wand to auto-generate'),
(N'ReleaseModel.Name.MaxLengthMsg', N'Max Length Msg'),
(N'ReleaseModel.Name.ProjectFormat', N'project format'),
(N'ReleaseModel.Name.RequiredMsg', N'Version Required'),
(N'ReleaseModel.Name.UniqueScopeMsg', N'This version already exists for one of the selected projects'),
(N'ReleaseModel.Project', N'Project'),
(N'ReleaseModel.ProjectRemoval.BlockedMsg', N'{0} task(s) linked to this release belong to projects not selected: {1}. Move them to another release first.'),
(N'ReleaseModel.ProjectScope', N'Projects'),
(N'ReleaseModel.ProjectScope.All', N'All projects'),
(N'ReleaseModel.ProjectScope.Specific', N'Specific projects'),
(N'ReleaseModel.ReleaseDate', N'Release Date'),
(N'ReleaseModel.ReleaseType', N'Release Type'),
(N'ReleaseModel.SelectedProjectIds', N'Select projects'),
(N'ReleaseModel.SelectedProjectIds.RequiredMsg', N'Select at least one project'),
(N'ReleaseModel.StartDate.RequiredMsg', N'Date Required'),
(N'ReleaseModel.Status', N'Status'),
(N'ReleasePage.Title', N'Release'),
(N'ReporterGrid.Active', N'Active'),
(N'ReporterGrid.Name', N'Name'),
(N'ReporterModel.Active', N'Active'),
(N'ReporterModel.Description', N'Description'),
(N'ReporterModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'ReporterModel.Name', N'Name'),
(N'ReporterModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'ReporterModel.Name.RequiredMsg', N'Name is required'),
(N'ReporterModel.Name.UniqueMsg', N'Name already exists!'),
(N'ReporterModel.Project', N'Project'),
(N'ReporterPage.Title', N'Reporter'),
(N'ReportLayout.Button', N'Export columns'),
(N'ReportLayout.Custom', N'Your layout'),
(N'ReportLayout.Default', N'Default layout'),
(N'ReportLayout.Hint', N'Drag to reorder and toggle to include or exclude. Applies only to your own downloads.'),
(N'ReportLayout.ResetDone', N'Export columns reset to the default layout.'),
(N'ReportLayout.ResetToDefault', N'Reset to default'),
(N'ReportLayout.Saved', N'Your export columns were saved.'),
(N'ReportLayout.SaveMine', N'Save as my layout'),
(N'ReportLayout.Title', N'My export columns'),
(N'ReportSettings.DefaultHint', N'This is the default layout for everyone. Users can reorder or hide columns for their own downloads; column titles always come from here, and columns you add appear for them too.'),
(N'ReportSettings.InvalidJson', N'The layout JSON is invalid and was not saved.'),
(N'ResetPasswordModel.Password', N'New Password'),
(N'ResetPasswordModel.Password.MaxLengthMsg', N'Max Length Msg'),
(N'ResetPasswordModel.Password.RequiredMsg', N'Required Msg'),
(N'ResourceGrid.ResourceKey', N'Resource Key'),
(N'ResourceGrid.ResourceValue', N'Resource Value'),
(N'ResourceLoadPage.Title', N'Resource Load'),
(N'ResourcePage.Title', N'Locale Resource'),
(N'ResourceSettingsModel.BalancedMax', N'Balanced load up to (open items)'),
(N'ResourceSettingsModel.CriticalWeight', N'Critical weight'),
(N'ResourceSettingsModel.DueSoonDays', N'"Due soon" window (days)'),
(N'ResourceSettingsModel.HighWeight', N'High weight'),
(N'ResourceSettingsModel.LightMax', N'Light load up to (open items)'),
(N'ResourceSettingsModel.LowWeight', N'Low weight'),
(N'ResourceSettingsModel.MediumWeight', N'Medium weight'),
(N'ReviewDrawer.Approvals', N'Approved by'),
(N'ReviewDrawer.Approve', N'Approve'),
(N'ReviewDrawer.Branches', N'Branches'),
(N'ReviewDrawer.Check.Behind', N'{0} commit(s) behind {1}'),
(N'ReviewDrawer.Check.Conflicts', N'Has merge conflicts'),
(N'ReviewDrawer.Check.DiscussionsOpen', N'Unresolved discussions'),
(N'ReviewDrawer.Check.DiscussionsResolved', N'Discussions resolved'),
(N'ReviewDrawer.Check.Draft', N'Still a draft'),
(N'ReviewDrawer.Check.NoConflicts', N'No conflicts'),
(N'ReviewDrawer.Check.NotDraft', N'Marked as ready'),
(N'ReviewDrawer.Check.UpToDate', N'Up to date with {0}'),
(N'ReviewDrawer.CollapseAll', N'Collapse all'),
(N'ReviewDrawer.Comment', N'Comment'),
(N'ReviewDrawer.CommentPlaceholder', N'Write a comment (posted on the merge request in GitLab)'),
(N'ReviewDrawer.Conflict.Editor', N'Resolve in GitLab'),
(N'ReviewDrawer.Conflict.Text', N'The merge request has conflicts. Use the steps under Check out & merge locally below, or GitLab''s conflict editor when the conflicts are simple.'),
(N'ReviewDrawer.Conflict.Title', N'Can''t be merged in GitLab: resolve the conflicts first'),
(N'ReviewDrawer.ConnectToAct', N'Connect your Git account to approve, comment, reject or merge from here.'),
(N'ReviewDrawer.Copied', N'Copied to clipboard'),
(N'ReviewDrawer.Copy', N'Copy'),
(N'ReviewDrawer.CopyCommands', N'Copy commands'),
(N'ReviewDrawer.ExpandAll', N'Expand all'),
(N'ReviewDrawer.File.Deleted', N'Deleted'),
(N'ReviewDrawer.File.New', N'New'),
(N'ReviewDrawer.File.Renamed', N'Renamed'),
(N'ReviewDrawer.Files', N'files changed'),
(N'ReviewDrawer.LoadFailed', N'Could not load the merge request from GitLab.'),
(N'ReviewDrawer.Local.GitLab.Step1', N'Fetch and check out this merge request''s feature branch:'),
(N'ReviewDrawer.Local.GitLab.Step2', N'Review the changes locally.'),
(N'ReviewDrawer.Local.GitLab.Step3', N'Merge the feature branch into the target branch and fix any conflicts.'),
(N'ReviewDrawer.Local.GitLab.Step4', N'Push the target branch up to GitLab.'),
(N'ReviewDrawer.Local.HowToFix', N'How do I fix them?'),
(N'ReviewDrawer.Local.LearnMore', N'Learn more.'),
(N'ReviewDrawer.Local.Tip', N'You can also check out merge requests locally.'),
(N'ReviewDrawer.Local.TipLabel', N'Tip:'),
(N'ReviewDrawer.Local.Title', N'Check out & merge locally'),
(N'ReviewDrawer.Merge', N'Merge'),
(N'ReviewDrawer.Merge.Confirm', N'Merge {0} from {1} into {2}? The linked tasks are then updated automatically.'),
(N'ReviewDrawer.Merge.RemoveSource', N'Delete the source branch after merging'),
(N'ReviewDrawer.Merge.Squash', N'Squash commits'),
(N'ReviewDrawer.Merge.Title', N'Merge'),
(N'ReviewDrawer.MergeInto', N'Merge into {0}'),
(N'ReviewDrawer.MrDescription', N'Merge request description'),
(N'ReviewDrawer.MrTitle', N'MR title'),
(N'ReviewDrawer.NoApprovals', N'No approvals yet'),
(N'ReviewDrawer.NoChanges', N'No file changes.'),
(N'ReviewDrawer.NoComments', N'No comments yet.'),
(N'ReviewDrawer.NoCommits', N'No commits.'),
(N'ReviewDrawer.NoContentChange', N'No content change (for example a mode or rename only).'),
(N'ReviewDrawer.NoDescription', N'No description.'),
(N'ReviewDrawer.NoMergePermission', N'You do not have the ''Merge Merge Requests'' permission.'),
(N'ReviewDrawer.NoTasks', N'No linked task found'),
(N'ReviewDrawer.NotOpen', N'This merge request is no longer open'),
(N'ReviewDrawer.Opened', N'Opened'),
(N'ReviewDrawer.OpenInGitLab', N'Open in repository'),
(N'ReviewDrawer.Overflow', N'Too many changes to show them all here; open the merge request in GitLab for the rest.'),
(N'ReviewDrawer.OwnMr', N'This is your own merge request. GitLab may not let you approve or merge it yourself.'),
(N'ReviewDrawer.PostComment', N'Post comment'),
(N'ReviewDrawer.Readiness', N'Merge readiness'),
(N'ReviewDrawer.Rebase', N'Rebase'),
(N'ReviewDrawer.Rebase.Confirm', N'Rebase this merge request onto its target branch in GitLab?'),
(N'ReviewDrawer.Reject', N'Reject'),
(N'ReviewDrawer.Reject.Prompt', N'Why is it rejected? This is posted on the merge request and in the task history, then the merge request is closed.'),
(N'ReviewDrawer.Reject.Required', N'A reason is required.'),
(N'ReviewDrawer.Reject.Title', N'Reject merge request'),
(N'ReviewDrawer.RequestChanges', N'Request changes'),
(N'ReviewDrawer.RequestChanges.Prompt', N'What needs to change? This is posted on the merge request in GitLab and in the task history. The merge request stays open, and your approval (if any) is removed.'),
(N'ReviewDrawer.RequestChanges.Required', N'Describe what needs to change.'),
(N'ReviewDrawer.RequestChanges.Send', N'Send to author'),
(N'ReviewDrawer.RequestChanges.Title', N'Request changes'),
(N'ReviewDrawer.Source', N'Source'),
(N'ReviewDrawer.Tab.Changes', N'Changes'),
(N'ReviewDrawer.Tab.Commits', N'Commits'),
(N'ReviewDrawer.Tab.Discussion', N'Discussion'),
(N'ReviewDrawer.Tab.Overview', N'Overview'),
(N'ReviewDrawer.Target', N'Target'),
(N'ReviewDrawer.TaskDescription', N'No MR description; showing the task'),
(N'ReviewDrawer.Tasks', N'Tasks'),
(N'ReviewDrawer.TooLarge', N'This file''s change is too large to show here. Open the merge request in GitLab to see it.'),
(N'ReviewDrawer.Unapprove', N'Remove approval'),
(N'ReviewPage.Action.Review', N'Review'),
(N'ReviewPage.CheckConflicts', N'Check conflicts'),
(N'ReviewPage.CheckConflicts.Hint', N'Re-check open merge requests and notify authors whose merge requests now have conflicts'),
(N'ReviewPage.CheckConflicts.Result', N'{0} merge request(s) with conflicts; {1} author(s) notified.'),
(N'ReviewPage.ClearFilters', N'Clear filters'),
(N'ReviewPage.Col.Age', N'Age'),
(N'ReviewPage.Col.Mr', N'Merge request'),
(N'ReviewPage.Col.Reviewer', N'Reviewer'),
(N'ReviewPage.Col.Status', N'Status'),
(N'ReviewPage.Col.Tasks', N'Tasks'),
(N'ReviewPage.Connect.Button', N'Connect GitLab'),
(N'ReviewPage.Connect.ExpiredTitle', N'Your GitLab token has expired'),
(N'ReviewPage.Connect.ExpiringSoon', N'Your GitLab token expires soon. Create a new one and reconnect before'),
(N'ReviewPage.Connect.Text', N'You can browse merge requests now. Actions are done with your own GitLab account, so GitLab records them in your name and applies your project permissions.'),
(N'ReviewPage.Connect.Title', N'Connect your GitLab account to approve, comment and merge'),
(N'ReviewPage.Empty', N'No open merge requests in your projects.'),
(N'ReviewPage.FailedProjects', N'Could not load merge requests for:'),
(N'ReviewPage.Filter.AllAuthors', N'All authors'),
(N'ReviewPage.Filter.AllProjects', N'All projects'),
(N'ReviewPage.Filter.AllTargets', N'All target branches'),
(N'ReviewPage.Filter.NoReviewer', N'No reviewer'),
(N'ReviewPage.Group.CollapseAll', N'Collapse all projects'),
(N'ReviewPage.Group.Conflict', N'{0} conflicts'),
(N'ReviewPage.Group.ExpandAll', N'Expand all projects'),
(N'ReviewPage.Group.NoReviewer', N'{0} no reviewer'),
(N'ReviewPage.Group.Open', N'{0} open'),
(N'ReviewPage.Group.Ready', N'{0} ready'),
(N'ReviewPage.GroupByProject', N'Group by project'),
(N'ReviewPage.Loading', N'Loading…'),
(N'ReviewPage.NoneMatch', N'No merge requests match the current filters.'),
(N'ReviewPage.NoProjects', N'You are not a reviewer for any project yet. A project''s Team Lead and Code Reviewer review automatically; others need "Can review MRs" on the project members screen.'),
(N'ReviewPage.NoTask', N'No task'),
(N'ReviewPage.NoTaskHint', N'No Taskist task found. MRs are linked when the task number is in the title or description (for example #2588), in the branch name, or through a linked branch.'),
(N'ReviewPage.Refresh', N'Refresh from GitLab'),
(N'ReviewPage.Search', N'Search title, !MR, #task, branch'),
(N'ReviewPage.Sort', N'Sort'),
(N'ReviewPage.Sort.Oldest', N'Oldest waiting'),
(N'ReviewPage.Sort.Project', N'Project'),
(N'ReviewPage.Sort.Updated', N'Recently updated'),
(N'ReviewPage.Tag.Unassigned', N'No reviewer'),
(N'ReviewPage.Tag.Yours', N'Yours'),
(N'ReviewPage.Tile.Conflicts', N'Conflicts / rebase'),
(N'ReviewPage.Tile.Ready', N'Ready to merge'),
(N'ReviewPage.Tile.Stale', N'No activity 3+ days'),
(N'ReviewPage.Tile.Waiting', N'Waiting for review'),
(N'ReviewPage.Title', N'Reviews'),
(N'ReviewPage.View.All', N'All I can review'),
(N'ReviewPage.View.Lead', N'Projects I lead'),
(N'ReviewPage.View.Mine', N'Mine'),
(N'ReviewStatus.Blocked', N'Blocked'),
(N'ReviewStatus.Checking', N'Checking'),
(N'ReviewStatus.Conflict', N'Conflicts'),
(N'ReviewStatus.Draft', N'Draft'),
(N'ReviewStatus.Mergeable', N'Ready to merge'),
(N'ReviewStatus.NeedsRebase', N'Needs rebase'),
(N'ReviewStatus.NotChecked', N'Not checked'),
(N'ReviewStatus.Other', N'Unknown'),
(N'Select.SelectedCount', N'{0} selected'),
(N'SeverityGrid.Active', N'Active'),
(N'SeverityGrid.BackgroundColor', N'Background Color'),
(N'SeverityGrid.Description', N'Description'),
(N'SeverityGrid.Group', N'Group'),
(N'SeverityGrid.IconClass', N'Icon Class'),
(N'SeverityGrid.Name', N'Name'),
(N'SeverityGrid.TextColor', N'Text Color'),
(N'SeverityModel.Active', N'Active'),
(N'SeverityModel.BackgroundColor', N'Background Color'),
(N'SeverityModel.BackgroundColor.MaxLengthMsg', N'The length of background color must be 20 characters or fewer'),
(N'SeverityModel.Description', N'Description'),
(N'SeverityModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'SeverityModel.Group', N'Group'),
(N'SeverityModel.Group.RequiredMsg', N'Group is required'),
(N'SeverityModel.IconClass', N'Icon Class'),
(N'SeverityModel.IconClass.MaxLengthMsg', N'The length of icon class must be 50 characters or fewer'),
(N'SeverityModel.Name', N'Name'),
(N'SeverityModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'SeverityModel.Name.RequiredMsg', N'Name is required'),
(N'SeverityModel.Name.UniqueMsg', N'Name already exists!'),
(N'SeverityModel.TextColor', N'Text Color'),
(N'SeverityModel.TextColor.MaxLengthMsg', N'The length of text color must be 20 characters or fewer'),
(N'SeverityPage.Title', N'Severity'),
(N'StageDuration.InvalidRows', N'The stage-duration metrics could not be read and were not saved.'),
(N'StageDurationPage.Title', N'Stage Duration'),
(N'StatusGrid.Active', N'Active'),
(N'StatusGrid.BackgroundColor', N'Background Color'),
(N'StatusGrid.Description', N'Description'),
(N'StatusGrid.Group', N'Group'),
(N'StatusGrid.IconClass', N'Icon Class'),
(N'StatusGrid.Name', N'Name'),
(N'StatusGrid.SystemDefined', N'System Defined'),
(N'StatusGrid.TextColor', N'Text Color'),
(N'StatusModel.Active', N'Active'),
(N'StatusModel.BackgroundColor', N'Background Color'),
(N'StatusModel.BackgroundColor.MaxLengthMsg', N'The length of background color must be 20 characters or fewer'),
(N'StatusModel.Description', N'Description'),
(N'StatusModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'StatusModel.ExternalUse', N'External Use'),
(N'StatusModel.Group', N'Group'),
(N'StatusModel.Group.RequiredMsg', N'Group is required'),
(N'StatusModel.IconClass', N'Icon Class'),
(N'StatusModel.IconClass.MaxLengthMsg', N'The length of icon class must be 50 characters or fewer'),
(N'StatusModel.Name', N'Name'),
(N'StatusModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'StatusModel.Name.RequiredMsg', N'Name is required'),
(N'StatusModel.Name.UniqueMsg', N'Name already exists!'),
(N'StatusModel.Project', N'Project'),
(N'StatusModel.RequiredMrNumberForBug', N'Required MR # For Bug'),
(N'StatusModel.RequiredMrNumberForCr', N'Required MR # For CR'),
(N'StatusModel.RequiredResolutionForBug', N'Required Resolution For Bug'),
(N'StatusModel.RequiredResolutionForCr', N'Required Resolution For CR'),
(N'StatusModel.RequiredRootCauseForBug', N'Required Root Cause For Bug'),
(N'StatusModel.RequiredRootCauseForCr', N'Required Root Cause For CR'),
(N'StatusModel.TextColor', N'Text Color'),
(N'StatusModel.TextColor.MaxLengthMsg', N'The length of text color must be 20 characters or fewer'),
(N'StatusPage.ClosingRules.Bug', N'Bug'),
(N'StatusPage.ClosingRules.Cr', N'CR'),
(N'StatusPage.ClosingRules.Intro', N'What a Bug or CR must have before it can move into this status.'),
(N'StatusPage.ClosingRules.MrNote', N'Merge request counts as met only when a closing MR is recorded for the task. The developer picks it (or types its number) in the closing pop-up; MRs found in GitLab are offered as suggestions.'),
(N'StatusPage.ClosingRules.Title', N'Closing requirements'),
(N'StatusPage.SystemDefinedMsg', N'System status can''t be modified'),
(N'StatusPage.Title', N'Status'),
(N'SubModuleGrid.Active', N'Active'),
(N'SubModuleGrid.ModuleName', N'Module'),
(N'SubModuleGrid.Name', N'Name'),
(N'SubModuleModel.Active', N'Active'),
(N'SubModuleModel.Description', N'Description'),
(N'SubModuleModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'SubModuleModel.Module', N'Module'),
(N'SubModuleModel.Name', N'Name'),
(N'SubModuleModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'SubModuleModel.Name.RequiredMsg', N'Name is required'),
(N'SubModuleModel.Name.UniqueMsg', N'Name already exists!'),
(N'SubModuleModel.Owner', N'Owner'),
(N'SubModulePage.Title', N'Sub Module'),
(N'TagGrid.Active', N'Active'),
(N'TagGrid.Merge', N'Merge'),
(N'TagGrid.Name', N'Name'),
(N'TagModel.Active', N'Active'),
(N'TagModel.MergeTarget', N'Merge into'),
(N'TagModel.Name', N'Name'),
(N'TagModel.Name.MaxLengthMsg', N'Name cannot exceed 100 characters'),
(N'TagModel.Name.RequiredMsg', N'Name is required'),
(N'TagModel.Name.UniqueMsg', N'A tag with this name already exists'),
(N'TagPage.Title', N'Tags'),
(N'TaskExplorerPage.Title', N'Task Explorer'),
(N'TaskTypeGrid.Active', N'Active'),
(N'TaskTypeGrid.BackgroundColor', N'Background Color'),
(N'TaskTypeGrid.Description', N'Description'),
(N'TaskTypeGrid.Group', N'Group'),
(N'TaskTypeGrid.IconClass', N'Icon Class'),
(N'TaskTypeGrid.Name', N'Name'),
(N'TaskTypeGrid.TextColor', N'Text Color'),
(N'TaskTypeModel.Active', N'Active'),
(N'TaskTypeModel.BackgroundColor', N'Background Color'),
(N'TaskTypeModel.BackgroundColor.MaxLengthMsg', N'The length of background color must be 20 characters or fewer'),
(N'TaskTypeModel.Description', N'Description'),
(N'TaskTypeModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'TaskTypeModel.Group', N'Group'),
(N'TaskTypeModel.Group.RequiredMsg', N'Group is required'),
(N'TaskTypeModel.IconClass', N'Icon Class'),
(N'TaskTypeModel.IconClass.MaxLengthMsg', N'The length of icon class must be 50 characters or fewer'),
(N'TaskTypeModel.Name', N'Name'),
(N'TaskTypeModel.Name.MaxLengthMsg', N'The length of name must be 100 characters or fewer'),
(N'TaskTypeModel.Name.RequiredMsg', N'Name is required'),
(N'TaskTypeModel.Name.UniqueMsg', N'Name already exists!'),
(N'TaskTypeModel.TextColor', N'Text Color'),
(N'TaskTypeModel.TextColor.MaxLengthMsg', N'The length of text color must be 20 characters or fewer'),
(N'TaskTypePage.Title', N'Task Type'),
(N'TeamsTest.Preview', N'Preview'),
(N'TestEmail.Body', N'This is a test email sent using the "{0}" email account (host {1}, port {2}). If you received this, your SMTP settings are working.'),
(N'TestEmail.FailedMsg', N'Failed to send test email: {0}'),
(N'TestEmail.Send', N'Send test'),
(N'TestEmail.Subject', N'Test email from Taskist'),
(N'TestEmail.SuccessMsg', N'Test email sent successfully.'),
(N'TestEmailModel.ToEmail', N'Send test email to'),
(N'TestEmailModel.ToEmail.InvalidEmailMsg', N'Enter a valid email address'),
(N'TestEmailModel.ToEmail.RequiredMsg', N'Recipient email is required'),
(N'Timeline.Calendar', N'Calendar'),
(N'Timeline.Gantt', N'Gantt'),
(N'Timeline.HeatLegend', N'Day shading shows how many tasks are due (darker = busier).'),
(N'TimelinePage.Title', N'Timeline'),
(N'UserAccess.All', N'All'),
(N'UserAccess.EffectivePermissions', N'Effective permissions'),
(N'UserAccess.FilterPermission', N'Permission'),
(N'UserAccess.FilterRole', N'Role'),
(N'UserAccess.NoPermissions', N'No permissions.'),
(N'UserAccess.NoRoles', N'No roles assigned.'),
(N'UserAccess.Roles', N'Assigned roles'),
(N'UserAccess.ViewAccess', N'View access'),
(N'UserAccessGrid.PermissionCount', N'Permissions'),
(N'UserAccessGrid.Roles', N'Roles'),
(N'UserAccessGrid.User', N'User'),
(N'UserAccessPage.Title', N'Roles & Permissions'),
(N'UserFilterModel.Any', N'Any'),
(N'UserFilterModel.Locked', N'Locked'),
(N'UserFilterModel.LockedNo', N'Unlocked'),
(N'UserFilterModel.LockedYes', N'Locked'),
(N'UserFilterModel.Role', N'Role'),
(N'UserFilterModel.Status', N'Status'),
(N'UserGrid.Email', N'Email'),
(N'UserGrid.FirstName', N'First Name'),
(N'UserGrid.LastName', N'Last Name'),
(N'UserGrid.Locked', N'Locked'),
(N'UserGrid.MobileNumber', N'Mobile #'),
(N'UserGrid.Status', N'Status'),
(N'UserModel.DateOfBirth', N'DOB'),
(N'UserModel.DateOfBirth.InvalidMsg', N'Invalid DOB'),
(N'UserModel.DateOfBirth.RequiredMsg', N'DOB is required'),
(N'UserModel.DateOfJoin', N'DOJ'),
(N'UserModel.DateOfJoin.InvalidMsg', N'Invalid DOJ'),
(N'UserModel.DateOfJoin.RequiredMsg', N'DOJ is required'),
(N'UserModel.Email', N'Email'),
(N'UserModel.Email.InvalidEmailMsg', N'Invalid Email Msg'),
(N'UserModel.Email.MaxLengthMsg', N'Max Length Msg'),
(N'UserModel.Email.RequiredMsg', N'Email is required'),
(N'UserModel.Email.UniqueMsg', N'Unique Msg'),
(N'UserModel.EmailWelcomeKit', N'Email Welcome Kit'),
(N'UserModel.FirstName', N'First name'),
(N'UserModel.FirstName.MaxLengthMsg', N'The length of first name must be 50 characters or fewer'),
(N'UserModel.FirstName.RequiredMsg', N'First name is required'),
(N'UserModel.FriendlyName', N'Friendly Name'),
(N'UserModel.FriendlyName.Hint', N'Optional preferred/display name shown across the app instead of the full name.'),
(N'UserModel.Gender', N'Gender'),
(N'UserModel.Gender.RequiredMsg', N'Gender is required'),
(N'UserModel.GitUserName', N'Git Username'),
(N'UserModel.Language', N'Language'),
(N'UserModel.LastName', N'Last name'),
(N'UserModel.LastName.MaxLengthMsg', N'The length of last name must be 50 characters or fewer'),
(N'UserModel.LastName.RequiredMsg', N'Last name is required'),
(N'UserModel.MaritalStatus', N'Marital Status'),
(N'UserModel.MobileNumber', N'Mobile #'),
(N'UserModel.MobileNumber.InvalidMsg', N'Invalid mobile numer'),
(N'UserModel.MobileNumber.RequiredMsg', N'Mobile number is required'),
(N'UserModel.Role', N'Role'),
(N'UserModel.Role.RequiredMsg', N'Role is required'),
(N'UserModel.Status', N'Status'),
(N'UserModel.Status.RequiredMsg', N'Status is required'),
(N'UserModel.UserNumber', N'User Number'),
(N'UserModel.UserNumber.MaxLengthMsg', N'The length of employee number must be 20 characters or fewer'),
(N'UserModel.UserNumber.RequiredMsg', N'User No is required'),
(N'UserPage.Title', N'User Registration'),
(N'UserProjectModel.CanAddWiki', N'Can Add Wiki'),
(N'UserProjectModel.CanChangeProject', N'Can Change Project'),
(N'UserProjectModel.CanClose', N'Can Close'),
(N'UserProjectModel.CanComment', N'Can Comment'),
(N'UserProjectModel.CanDeleteTask', N'Can Delete Task'),
(N'UserProjectModel.CanEdit', N'Can Edit'),
(N'UserProjectModel.CanEditOthersTask', N'Can Edit Others Task'),
(N'UserProjectModel.CanMergeMergeRequests', N'Can merge MRs'),
(N'UserProjectModel.CanMergeMergeRequests.Hint', N'Can also merge and rebase this project''s merge requests from Taskist (needs the ''Merge Merge Requests'' permission too). GitLab''s own merge rules still apply.'),
(N'UserProjectModel.CanReOpen', N'Can Reopen'),
(N'UserProjectModel.CanReportBug', N'Can Report Bug'),
(N'UserProjectModel.CanReportCR', N'Can Report CR'),
(N'UserProjectModel.CanReportToDo', N'Can Report To Do'),
(N'UserProjectModel.CanReviewMergeRequests', N'Can review MRs'),
(N'UserProjectModel.CanReviewMergeRequests.Hint', N'Can see this project''s merge requests on the Reviews page and approve, comment or reject them. The project''s Team Lead and Code Reviewer can always do this.'),
(N'UserProjectModel.CanViewOthersTask', N'Can View Others Task'),
(N'UserProjectModel.ReviewSection', N'Merge request reviews'),
(N'UserProjectModel.Section.Others', N'Other members'' tasks'),
(N'UserProjectModel.Section.Report', N'Create tasks'),
(N'UserProjectModel.Section.Wiki', N'Wiki'),
(N'UserProjectModel.Section.Work', N'Work on tasks'),
(N'UserProjectModel.User', N'Member'),
(N'UserRole.Menu', N'User Role'),
(N'UserRoleGrid.Active', N'Active'),
(N'UserRoleGrid.Button.Permission', N'Permission'),
(N'UserRoleGrid.Description', N'Description'),
(N'UserRoleGrid.Name', N'Name'),
(N'UserRoleGrid.SystemDefined', N'System Defined'),
(N'UserRoleGrid.SystemName', N'System Name'),
(N'UserRoleModal.SystemRoleMsg', N'System role permission can''t be modified'),
(N'UserRoleModel.Active', N'Active'),
(N'UserRoleModel.Description', N'Description'),
(N'UserRoleModel.Description.MaxLengthMsg', N'The length of description must be 250 characters or fewer'),
(N'UserRoleModel.Name', N'Name'),
(N'UserRoleModel.Name.MaxLengthMsg', N'The length of name must be 250 characters or fewer'),
(N'UserRoleModel.Name.RequiredMsg', N'Name is required'),
(N'UserRoleModel.Name.UniqueMsg', N'Role already exists'),
(N'UserRoleModel.SystemDefined', N'System Defined'),
(N'UserRoleModel.SystemName', N'System Name'),
(N'UserRoleModel.SystemName.MaxLengthMsg', N'The length of system name must be 250 characters or fewer'),
(N'UserRoleModel.SystemName.RequiredMsg', N'System name is required'),
(N'UserRoleModel.SystemName.UniqueMsg', N'System name already exists'),
(N'UserRolePage.Title', N'User Role'),
(N'UserRolePermissionModel.Name', N'Name'),
(N'UserRolePermissionModel.RoleGroup', N'Role Group'),
(N'UserRolePermissionModel.SystemName', N'System Name'),
(N'UserRolePermissionModel.SystemPermission', N'System Permission'),
(N'UserUnlock.Confirm', N'Unlock {0}? They will be able to sign in again and the failed-attempt count will reset.'),
(N'UserUnlock.SuccessMsg', N'User unlocked successfully.'),
(N'UserUnlock.Unlock', N'Unlock'),
(N'Validation.PasswordMinLength', N'Password must be at least {0} characters'),
(N'WikiPage.Title', N'Wiki'),
(N'WorkItemSetup.Menu', N'Work Item Setup')
) AS s ([ResourceKey], [ResourceValue])
WHERE NOT EXISTS (SELECT 1 FROM [LocaleResource] AS t WHERE t.[LanguageId] = @languageId AND t.[ResourceKey] = s.[ResourceKey]);
COMMIT TRANSACTION;
PRINT 'Locale resources seeded.';