Maintenance: Improved translatable source strings.

This commit is contained in:
Martin Gruner 2021-12-10 15:00:59 +01:00
parent 525476d539
commit 5aa7d7c5b2
26 changed files with 144 additions and 144 deletions

View file

@ -20,9 +20,9 @@ class App.Calendar extends App.Model
"#{@name} - #{@timezone}" "#{@name} - #{@timezone}"
@description = __(''' @description = __('''
A **calendar** is needed for calculation of escalation based on business hours and sending out escalation notifications.. A **calendar** is needed to calculate escalations based on business hours and to send out escalation notifications.
Define a **"standard"** calendar which is valid system-wide. Only in the defined business hours the escalation notifications will be sent to your agents. Define a **"standard"** calendar which is valid system-wide. The escalation notifications will only be sent to your agents during the defined business hours.
Do you have customers with different business hours, you can create multiple calendars. Tickets are linked to calendars using **SLAs**. If you have customers with different business hours, you can create multiple calendars. Tickets are linked to calendars using **SLAs**.
''') ''')

View file

@ -13,11 +13,11 @@ class App.DataPrivacyTask extends App.Model
@configure_overview = [] @configure_overview = []
@description = __(''' @description = __('''
** Data Privacy **, helps you to delete and verify the removal of existing data of the system. ** Data Privacy ** helps you to delete and verify the removal of existing data from the system.
It can be used to delete tickets, organizations and users. The owner assignment will be unset in case the deleted user is an agent. It can be used to delete tickets, organizations, and users. The owner assignment will be unset in case the deleted user is an agent.
Data Privacy tasks will be executed every 10 minutes. The execution might take some additional time depending of the number of objects that should get deleted. Data Privacy tasks will be executed every 10 minutes. The execution might take some additional time depending on the number of objects that will be deleted.
''') ''')
activityMessage: (item) -> activityMessage: (item) ->
@ -25,9 +25,9 @@ Data Privacy tasks will be executed every 10 minutes. The execution might take s
return if !item.created_by return if !item.created_by
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created data privacy task to delete user id |%s|', item.created_by.displayName(), item.objectNative.deletable_id) return App.i18n.translateContent('%s created data privacy task to delete user ID |%s|', item.created_by.displayName(), item.objectNative.deletable_id)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated data privacy task to delete user id |%s|', item.created_by.displayName(), item.objectNative.deletable_id) return App.i18n.translateContent('%s updated data privacy task to delete user ID |%s|', item.created_by.displayName(), item.objectNative.deletable_id)
else if item.type is 'completed' else if item.type is 'completed'
return App.i18n.translateContent('%s completed data privacy task to delete user id |%s|', item.created_by.displayName(), item.objectNative.deletable_id) return App.i18n.translateContent('%s completed data privacy task to delete user ID |%s|', item.created_by.displayName(), item.objectNative.deletable_id)
return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model." return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model."

View file

@ -24,9 +24,9 @@ class App.Group extends App.Model
activityMessage: (item) -> activityMessage: (item) ->
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created Group |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s created group |%s|', item.created_by.displayName(), item.title)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated Group |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s updated group |%s|', item.created_by.displayName(), item.title)
return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model." return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model."
avatar: (size = 40, cssClass = []) -> avatar: (size = 40, cssClass = []) ->

View file

@ -79,7 +79,7 @@ Using **Organisations** you can **group** customers. This has among others two i
return if !item.created_by return if !item.created_by
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created Organization |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s created organization |%s|', item.created_by.displayName(), item.title)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated Organization |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s updated organization |%s|', item.created_by.displayName(), item.title)
return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model." return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model."

View file

@ -23,9 +23,9 @@ class App.Role extends App.Model
return if !item.created_by return if !item.created_by
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created Role |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s created role |%s|', item.created_by.displayName(), item.title)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated Role |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s updated role |%s|', item.created_by.displayName(), item.title)
return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model." return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model."
@_fillUp: (data) -> @_fillUp: (data) ->

View file

@ -22,9 +22,9 @@ class App.Sla extends App.Model
] ]
@description = __(''' @description = __('''
** Service Level Agreements **, abbreviated ** SLAs **, help you to meet certain customers' time-related responses. Thus, for example, you can say customers should always get a response from you after 8 hours at the latest. In the event of an imminent violation or a breach, Zammad will alert you to such events. ** Service Level Agreements **, abbreviated ** SLAs **, help you to meet specific response times for your customers' requests. This way you can define goals such as answering every inquiry within eight hours. If you are at risk of missing this target, Zammad will alert you.
It can be ** response time ** (time between the creation of a ticket and the first reaction of an agent), ** update time ** (time between a customer's request and an agent's reaction) and ** solution time ** (time between creation and closing a ticket ) To be defined. You can define targets for three different metrics: ** response time ** (time between the creation of a ticket and the first reaction of an agent), ** update time ** (time between a customer's request and an agent's reaction), and ** solution time ** (time between creating and closing a ticket).
Any violations are displayed in a separate view in the overviews. You can also configure ** e-mail notifications **. Any escalated tickets (i.e. tickets that have missed the defined target) are displayed in a separate view in your overviews. You can also configure ** email notifications **.
''') ''')

View file

@ -105,11 +105,11 @@ class App.Ticket extends App.Model
switch item.type switch item.type
when 'create' when 'create'
App.i18n.translateContent('%s created Ticket |%s|', item.created_by.displayName(), item.title) App.i18n.translateContent('%s created ticket |%s|', item.created_by.displayName(), item.title)
when 'update' when 'update'
App.i18n.translateContent('%s updated Ticket |%s|', item.created_by.displayName(), item.title) App.i18n.translateContent('%s updated ticket |%s|', item.created_by.displayName(), item.title)
when 'reminder_reached' when 'reminder_reached'
App.i18n.translateContent('Pending reminder reached for Ticket |%s|', item.title) App.i18n.translateContent('Pending reminder reached for ticket |%s|', item.title)
when 'escalation' when 'escalation'
App.i18n.translateContent('Ticket |%s| is escalated!', item.title) App.i18n.translateContent('Ticket |%s| is escalated!', item.title)
when 'escalation_warning' when 'escalation_warning'

View file

@ -46,9 +46,9 @@ class App.TicketArticle extends App.Model
return if !item.created_by return if !item.created_by
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created Article for |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s created article for |%s|', item.created_by.displayName(), item.title)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated Article for |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s updated article for |%s|', item.created_by.displayName(), item.title)
return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model." return "Unknow action for (#{@objectDisplayName()}/#{item.type}), extend activityMessage() of model."
@contentAttachments: (article) -> @contentAttachments: (article) ->

View file

@ -177,9 +177,9 @@ class App.User extends App.Model
return if !item.created_by return if !item.created_by
if item.type is 'create' if item.type is 'create'
return App.i18n.translateContent('%s created User |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s created user |%s|', item.created_by.displayName(), item.title)
else if item.type is 'update' else if item.type is 'update'
return App.i18n.translateContent('%s updated User |%s|', item.created_by.displayName(), item.title) return App.i18n.translateContent('%s updated user |%s|', item.created_by.displayName(), item.title)
else if item.type is 'session started' else if item.type is 'session started'
return App.i18n.translateContent('%s started a new session', item.created_by.displayName()) return App.i18n.translateContent('%s started a new session', item.created_by.displayName())
else if item.type is 'switch to' else if item.type is 'switch to'

View file

@ -50,9 +50,9 @@
<% date_migration = new Date("#{date_migration_string}T00:00:00") %> <% date_migration = new Date("#{date_migration_string}T00:00:00") %>
<% date_now = new Date() %> <% date_now = new Date() %>
<% if date_now > date_migration: %> <% if date_now > date_migration: %>
<%- @T('%s will only allow access via OAuth. Password-based access is no longer supported since %s.', 'G Suite', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateGoogleMail" type="button"><%- @T('Migrate now!') %></button> <%- @T('%s will only allow access via OAuth. Password-based access has not been supported since %s.', 'G Suite', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateGoogleMail" type="button"><%- @T('Migrate now!') %></button>
<% else: %> <% else: %>
<%- @T('%s will only allow access via OAuth. Password-based access will no longer be supported on %s.', 'G Suite', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateGoogleMail" type="button"><%- @T('Migrate now!') %></button> <%- @T('%s will only allow access via OAuth. Password-based access is no longer supported on %s.', 'G Suite', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateGoogleMail" type="button"><%- @T('Migrate now!') %></button>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>
@ -63,9 +63,9 @@
<% date_migration = new Date("#{date_migration_string}T00:00:00") %> <% date_migration = new Date("#{date_migration_string}T00:00:00") %>
<% date_now = new Date() %> <% date_now = new Date() %>
<% if date_now > date_migration: %> <% if date_now > date_migration: %>
<%- @T('%s will only allow access via OAuth. Password-based access is no longer supported since %s.', 'Microsoft 365', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateMicrosoft365Mail" type="button"><%- @T('Migrate now!') %></button> <%- @T('%s will only allow access via OAuth. Password-based access has not been supported since %s.', 'Microsoft 365', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateMicrosoft365Mail" type="button"><%- @T('Migrate now!') %></button>
<% else: %> <% else: %>
<%- @T('%s will only allow access via OAuth. Password-based access will no longer be supported on %s.', 'Microsoft 365', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateMicrosoft365Mail" type="button"><%- @T('Migrate now!') %></button> <%- @T('%s will only allow access via OAuth. Password-based access is no longer supported on %s.', 'Microsoft 365', date_migration_string_local) %> <div class="flex-spacer"></div><div class="double-spacer"></div><button class="btn js-migrateMicrosoft365Mail" type="button"><%- @T('Migrate now!') %></button>
<% end %> <% end %>
</div> </div>
<% end %> <% end %>
@ -110,7 +110,7 @@
<% groupName = channel.group %> <% groupName = channel.group %>
<% end %> <% end %>
<% if channel.group.active is false: %> <% if channel.group.active is false: %>
<%- @T('%s is inactive, please select a active one.', groupName) %> <%- @T('%s is inactive, please select an active one.', groupName) %>
<% else: %> <% else: %>
<%= groupName %> <%= groupName %>
<% end %> <% end %>

View file

@ -59,7 +59,7 @@
<% groupName = channel.group %> <% groupName = channel.group %>
<% end %> <% end %>
<% if channel.group.active is false: %> <% if channel.group.active is false: %>
<%- @T('%s is inactive, please select a active one.', groupName) %> <%- @T('%s is inactive, please select an active one.', groupName) %>
<% else: %> <% else: %>
<%= groupName %> <%= groupName %>
<% end %> <% end %>

View file

@ -1,6 +1,6 @@
<div class="stat-widget vertical"> <div class="stat-widget vertical">
<div class="stat-title"> <div class="stat-title">
<%- @T('Your tickets in process') %> <%- @T('My tickets in process') %>
<div class="stat-icon-help js-stat-help" title="<%- @Ti(@StatsTicketInProcess.description) %>" data-placement="bottom"> <div class="stat-icon-help js-stat-help" title="<%- @Ti(@StatsTicketInProcess.description) %>" data-placement="bottom">
<%- @Icon('help') %> <%- @Icon('help') %>
</div> </div>
@ -8,6 +8,6 @@
<div class="stat-graphic"> <div class="stat-graphic">
<%- @Icon('in-process', "in-process-icon #{@StatsTicketInProcess.state}-color") %> <%- @Icon('in-process', "in-process-icon #{@StatsTicketInProcess.state}-color") %>
</div> </div>
<div class="stat-label" title="<%- @T('%s of your tickets are currently in process.', @StatsTicketInProcess.in_process) %>"><%- @T('%s% are currently in process', @StatsTicketInProcess.percent) %></div> <div class="stat-label" title="<%- @T('%s of my tickets are currently in process.', @StatsTicketInProcess.in_process) %>"><%- @T('%s% are currently in process', @StatsTicketInProcess.percent) %></div>
<div class="stat-detail"><%- @T('Average: %s%', @StatsTicketInProcess.average_per_agent) %></div> <div class="stat-detail"><%- @T('Average: %s%', @StatsTicketInProcess.average_per_agent) %></div>
</div> </div>

View file

@ -7,13 +7,13 @@
<%- @T('The following changes are made:') %> <%- @T('The following changes are made:') %>
<ul> <ul>
<% if @result.stats.deleted isnt undefined: %> <% if @result.stats.deleted isnt undefined: %>
<li><%- @T('%s Object(s) are deleted.', @result.stats.deleted) %></li> <li><%- @T('%s object(s) are deleted.', @result.stats.deleted) %></li>
<% end %> <% end %>
<% if @result.stats.created isnt undefined: %> <% if @result.stats.created isnt undefined: %>
<li><%- @T('%s Object(s) are created.', @result.stats.created) %></li> <li><%- @T('%s object(s) are created.', @result.stats.created) %></li>
<% end %> <% end %>
<% if @result.stats.updated isnt undefined: %> <% if @result.stats.updated isnt undefined: %>
<li><%- @T('%s Object(s) are updated.', @result.stats.updated) %></li> <li><%- @T('%s object(s) are updated.', @result.stats.updated) %></li>
<% end %> <% end %>
<% end %> <% end %>
</p> </p>

View file

@ -15,13 +15,13 @@
<%- @T('The following changes have been made:') %> <%- @T('The following changes have been made:') %>
<ul> <ul>
<% if @result.stats.deleted isnt undefined: %> <% if @result.stats.deleted isnt undefined: %>
<li><%- @T('%s Object(s) were deleted.', @result.stats.deleted) %></li> <li><%- @T('%s object(s) were deleted.', @result.stats.deleted) %></li>
<% end %> <% end %>
<% if @result.stats.created isnt undefined: %> <% if @result.stats.created isnt undefined: %>
<li><%- @T('%s Object(s) have been created.', @result.stats.created) %></li> <li><%- @T('%s object(s) have been created.', @result.stats.created) %></li>
<% end %> <% end %>
<% if @result.stats.updated isnt undefined: %> <% if @result.stats.updated isnt undefined: %>
<li><%- @T('%s Object(s) have been updated.', @result.stats.updated) %></li> <li><%- @T('%s object(s) have been updated.', @result.stats.updated) %></li>
<% end %> <% end %>
<% end %> <% end %>
</p> </p>

View file

@ -59,7 +59,7 @@
<% groupName = channel.group %> <% groupName = channel.group %>
<% end %> <% end %>
<% if channel.group.active is false: %> <% if channel.group.active is false: %>
<%- @T('%s is inactive, please select a active one.', groupName) %> <%- @T('%s is inactive, please select an active one.', groupName) %>
<% else: %> <% else: %>
<%= groupName %> <%= groupName %>
<% end %> <% end %>

View file

@ -8,7 +8,7 @@
<%- @T('Enter the Subdomain of your %s system', 'Freshdesk') %>: <%- @T('Enter the Subdomain of your %s system', 'Freshdesk') %>:
</p> </p>
<div class="form-group"> <div class="form-group">
<label for="freshdesk-subdomain"><%- @T('%s Subdomain', 'Freshdesk') %></label> <label for="freshdesk-subdomain"><%- @T('%s subdomain', 'Freshdesk') %></label>
<div class="u-positionOrigin"> <div class="u-positionOrigin">
<div class="input-group"> <div class="input-group">
<input type="text" id="freshdesk-subdomain" class="form-control" placeholder="example" name="freshdesk-subdomain" aria-describedby="freshdesk-subdomain-addon"> <input type="text" id="freshdesk-subdomain" class="form-control" placeholder="example" name="freshdesk-subdomain" aria-describedby="freshdesk-subdomain-addon">

View file

@ -8,7 +8,7 @@
<%- @T('Enter the Subdomain of your %s system', 'Kayako') %>: <%- @T('Enter the Subdomain of your %s system', 'Kayako') %>:
</p> </p>
<div class="form-group"> <div class="form-group">
<label for="kayako-subdomain"><%- @T('%s Subdomain', 'Kayako') %></label> <label for="kayako-subdomain"><%- @T('%s subdomain', 'Kayako') %></label>
<div class="u-positionOrigin"> <div class="u-positionOrigin">
<div class="input-group"> <div class="input-group">
<input type="text" id="kayako-subdomain" class="form-control" placeholder="example" name="kayako-subdomain" aria-describedby="kayako-subdomain-addon"> <input type="text" id="kayako-subdomain" class="form-control" placeholder="example" name="kayako-subdomain" aria-describedby="kayako-subdomain-addon">

View file

@ -59,7 +59,7 @@
<% groupName = channel.group %> <% groupName = channel.group %>
<% end %> <% end %>
<% if channel.group.active is false: %> <% if channel.group.active is false: %>
<%- @T('%s is inactive, please select a active one.', groupName) %> <%- @T('%s is inactive, please select an active one.', groupName) %>
<% else: %> <% else: %>
<%= groupName %> <%= groupName %>
<% end %> <% end %>

View file

@ -6,7 +6,7 @@
<h2><%- @T('Enter your %s App Keys', 'Telegram') %></h2> <h2><%- @T('Enter your %s App Keys', 'Telegram') %></h2>
<div class="input form-group"> <div class="input form-group">
<div class="formGroup-label"> <div class="formGroup-label">
<label for="api_token"><%- @T('%s Api Token', 'Telegram') %> <span>*</span></label> <label for="api_token"><%- @T('%s API Token', 'Telegram') %> <span>*</span></label>
</div> </div>
<div class="controls"> <div class="controls">
<input id="api_token" type="text" name="api_token" value="" class="form-control" required autocomplete="off"> <input id="api_token" type="text" name="api_token" value="" class="form-control" required autocomplete="off">

View file

@ -3,7 +3,7 @@
<h2><%- @T('Enter your %s App Keys', 'Telegram') %></h2> <h2><%- @T('Enter your %s App Keys', 'Telegram') %></h2>
<div class="input form-group"> <div class="input form-group">
<div class="formGroup-label"> <div class="formGroup-label">
<label for="api_token"><%- @T('%s Api Token', 'Telegram') %> <span>*</span></label> <label for="api_token"><%- @T('%s API Token', 'Telegram') %> <span>*</span></label>
</div> </div>
<div class="controls"> <div class="controls">
<input id="api_token" type="text" name="api_token" value="<%= @channel.options.api_token %>" class="form-control" required autocomplete="off"> <input id="api_token" type="text" name="api_token" value="<%= @channel.options.api_token %>" class="form-control" required autocomplete="off">

View file

@ -13,7 +13,7 @@ module CreatesTicketArticles
subtype = params.delete(:subtype) subtype = params.delete(:subtype)
# check min. params # check min. params
raise Exceptions::UnprocessableEntity, __('Need at least article: { body: "some text" }') if params[:body].blank? raise Exceptions::UnprocessableEntity, __('Need at least an article body field.') if params[:body].blank?
# fill default values # fill default values
if params[:type_id].blank? && params[:type].blank? if params[:type_id].blank? && params[:type].blank?

View file

@ -44,7 +44,7 @@ msgstr ""
#: app/assets/javascripts/app/views/telegram/bot_add.jst.eco #: app/assets/javascripts/app/views/telegram/bot_add.jst.eco
#: app/assets/javascripts/app/views/telegram/bot_edit.jst.eco #: app/assets/javascripts/app/views/telegram/bot_edit.jst.eco
msgid "%s Api Token" msgid "%s API Token"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/integration/exchange_wizard.jst.eco #: app/assets/javascripts/app/views/integration/exchange_wizard.jst.eco
@ -63,39 +63,10 @@ msgstr ""
msgid "%s Migration" msgid "%s Migration"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s Object(s) are created."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s Object(s) are deleted."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s Object(s) are updated."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s Object(s) have been created."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s Object(s) have been updated."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s Object(s) were deleted."
msgstr ""
#: app/assets/javascripts/app/views/integration/ldap_wizard.jst.eco #: app/assets/javascripts/app/views/integration/ldap_wizard.jst.eco
msgid "%s Role" msgid "%s Role"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/import/freshdesk.jst.eco
#: app/assets/javascripts/app/views/import/kayako.jst.eco
msgid "%s Subdomain"
msgstr ""
#: app/assets/javascripts/app/views/import/freshdesk.jst.eco #: app/assets/javascripts/app/views/import/freshdesk.jst.eco
#: app/assets/javascripts/app/views/import/kayako.jst.eco #: app/assets/javascripts/app/views/import/kayako.jst.eco
#: app/assets/javascripts/app/views/import/zendesk.jst.eco #: app/assets/javascripts/app/views/import/zendesk.jst.eco
@ -107,35 +78,35 @@ msgid "%s ago"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/data_privacy_task.coffee #: app/assets/javascripts/app/models/data_privacy_task.coffee
msgid "%s completed data privacy task to delete user id |%s|" msgid "%s completed data privacy task to delete user ID |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/ticket_article.coffee #: app/assets/javascripts/app/models/ticket_article.coffee
msgid "%s created Article for |%s|" msgid "%s created article for |%s|"
msgstr ""
#: app/assets/javascripts/app/models/group.coffee
msgid "%s created Group |%s|"
msgstr ""
#: app/assets/javascripts/app/models/organization.coffee
msgid "%s created Organization |%s|"
msgstr ""
#: app/assets/javascripts/app/models/role.coffee
msgid "%s created Role |%s|"
msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee
msgid "%s created Ticket |%s|"
msgstr ""
#: app/assets/javascripts/app/models/user.coffee
msgid "%s created User |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/data_privacy_task.coffee #: app/assets/javascripts/app/models/data_privacy_task.coffee
msgid "%s created data privacy task to delete user id |%s|" msgid "%s created data privacy task to delete user ID |%s|"
msgstr ""
#: app/assets/javascripts/app/models/group.coffee
msgid "%s created group |%s|"
msgstr ""
#: app/assets/javascripts/app/models/organization.coffee
msgid "%s created organization |%s|"
msgstr ""
#: app/assets/javascripts/app/models/role.coffee
msgid "%s created role |%s|"
msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee
msgid "%s created ticket |%s|"
msgstr ""
#: app/assets/javascripts/app/models/user.coffee
msgid "%s created user |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/import/freshdesk.jst.eco #: app/assets/javascripts/app/views/import/freshdesk.jst.eco
@ -162,17 +133,41 @@ msgstr ""
#: app/assets/javascripts/app/views/channel/sms_account_overview.jst.eco #: app/assets/javascripts/app/views/channel/sms_account_overview.jst.eco
#: app/assets/javascripts/app/views/google/list.jst.eco #: app/assets/javascripts/app/views/google/list.jst.eco
#: app/assets/javascripts/app/views/microsoft365/list.jst.eco #: app/assets/javascripts/app/views/microsoft365/list.jst.eco
msgid "%s is inactive, please select a active one." msgid "%s is inactive, please select an active one."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s object(s) are created."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s object(s) are deleted."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/import_try.jst.eco
msgid "%s object(s) are updated."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s object(s) have been created."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s object(s) have been updated."
msgstr ""
#: app/assets/javascripts/app/views/generic/object_import/imported.jst.eco
msgid "%s object(s) were deleted."
msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco
msgid "%s of my tickets are currently in process."
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_escalation.jst.eco #: app/assets/javascripts/app/views/dashboard/stats/ticket_escalation.jst.eco
msgid "%s of my tickets escalated." msgid "%s of my tickets escalated."
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco
msgid "%s of your tickets are currently in process."
msgstr ""
#: app/assets/javascripts/app/views/ticket_overview/batch_overlay_user_group.jst.eco #: app/assets/javascripts/app/views/ticket_overview/batch_overlay_user_group.jst.eco
msgid "%s people" msgid "%s people"
msgstr "" msgstr ""
@ -185,36 +180,41 @@ msgstr ""
msgid "%s started a new session" msgid "%s started a new session"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/import/freshdesk.jst.eco
#: app/assets/javascripts/app/views/import/kayako.jst.eco
msgid "%s subdomain"
msgstr ""
#: app/assets/javascripts/app/models/user.coffee #: app/assets/javascripts/app/models/user.coffee
msgid "%s switched to |%s|!" msgid "%s switched to |%s|!"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/ticket_article.coffee #: app/assets/javascripts/app/models/ticket_article.coffee
msgid "%s updated Article for |%s|" msgid "%s updated article for |%s|"
msgstr ""
#: app/assets/javascripts/app/models/group.coffee
msgid "%s updated Group |%s|"
msgstr ""
#: app/assets/javascripts/app/models/organization.coffee
msgid "%s updated Organization |%s|"
msgstr ""
#: app/assets/javascripts/app/models/role.coffee
msgid "%s updated Role |%s|"
msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee
msgid "%s updated Ticket |%s|"
msgstr ""
#: app/assets/javascripts/app/models/user.coffee
msgid "%s updated User |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/data_privacy_task.coffee #: app/assets/javascripts/app/models/data_privacy_task.coffee
msgid "%s updated data privacy task to delete user id |%s|" msgid "%s updated data privacy task to delete user ID |%s|"
msgstr ""
#: app/assets/javascripts/app/models/group.coffee
msgid "%s updated group |%s|"
msgstr ""
#: app/assets/javascripts/app/models/organization.coffee
msgid "%s updated organization |%s|"
msgstr ""
#: app/assets/javascripts/app/models/role.coffee
msgid "%s updated role |%s|"
msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee
msgid "%s updated ticket |%s|"
msgstr ""
#: app/assets/javascripts/app/models/user.coffee
msgid "%s updated user |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/integration/exchange_last_import.jst.eco #: app/assets/javascripts/app/views/integration/exchange_last_import.jst.eco
@ -225,11 +225,11 @@ msgid "%s user to %s user"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco #: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco
msgid "%s will only allow access via OAuth. Password-based access is no longer supported since %s." msgid "%s will only allow access via OAuth. Password-based access has not been supported since %s."
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco #: app/assets/javascripts/app/views/channel/email_account_overview.jst.eco
msgid "%s will only allow access via OAuth. Password-based access will no longer be supported on %s." msgid "%s will only allow access via OAuth. Password-based access is no longer supported on %s."
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco #: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco
@ -241,11 +241,11 @@ msgid "%s% have been reopened"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/data_privacy_task.coffee #: app/assets/javascripts/app/models/data_privacy_task.coffee
msgid "** Data Privacy **, helps you to delete and verify the removal of existing data of the system.\n\nIt can be used to delete tickets, organizations and users. The owner assignment will be unset in case the deleted user is an agent.\n\nData Privacy tasks will be executed every 10 minutes. The execution might take some additional time depending of the number of objects that should get deleted." msgid "** Data Privacy ** helps you to delete and verify the removal of existing data from the system.\n\nIt can be used to delete tickets, organizations, and users. The owner assignment will be unset in case the deleted user is an agent.\n\nData Privacy tasks will be executed every 10 minutes. The execution might take some additional time depending on the number of objects that will be deleted."
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/sla.coffee #: app/assets/javascripts/app/models/sla.coffee
msgid "** Service Level Agreements **, abbreviated ** SLAs **, help you to meet certain customers' time-related responses. Thus, for example, you can say customers should always get a response from you after 8 hours at the latest. In the event of an imminent violation or a breach, Zammad will alert you to such events.\n\nIt can be ** response time ** (time between the creation of a ticket and the first reaction of an agent), ** update time ** (time between a customer's request and an agent's reaction) and ** solution time ** (time between creation and closing a ticket ) To be defined.\n\nAny violations are displayed in a separate view in the overviews. You can also configure ** e-mail notifications **." msgid "** Service Level Agreements **, abbreviated ** SLAs **, help you to meet specific response times for your customers' requests. This way you can define goals such as answering every inquiry within eight hours. If you are at risk of missing this target, Zammad will alert you.\n\nYou can define targets for three different metrics: ** response time ** (time between the creation of a ticket and the first reaction of an agent), ** update time ** (time between a customer's request and an agent's reaction), and ** solution time ** (time between creating and closing a ticket).\n\nAny escalated tickets (i.e. tickets that have missed the defined target) are displayed in a separate view in your overviews. You can also configure ** email notifications **."
msgstr "" msgstr ""
#: app/assets/javascripts/app/controllers/_plugin/keyboard_shortcuts.coffee #: app/assets/javascripts/app/controllers/_plugin/keyboard_shortcuts.coffee
@ -305,7 +305,7 @@ msgid "4 weeks"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/calendar.coffee #: app/assets/javascripts/app/models/calendar.coffee
msgid "A **calendar** is needed for calculation of escalation based on business hours and sending out escalation notifications..\n\nDefine a **\"standard\"** calendar which is valid system-wide. Only in the defined business hours the escalation notifications will be sent to your agents.\n\nDo you have customers with different business hours, you can create multiple calendars. Tickets are linked to calendars using **SLAs**." msgid "A **calendar** is needed to calculate escalations based on business hours and to send out escalation notifications.\n\nDefine a **\"standard\"** calendar which is valid system-wide. The escalation notifications will only be sent to your agents during the defined business hours.\n\nIf you have customers with different business hours, you can create multiple calendars. Tickets are linked to calendars using **SLAs**."
msgstr "" msgstr ""
#: db/seeds/settings.rb #: db/seeds/settings.rb
@ -5949,6 +5949,10 @@ msgstr ""
msgid "My subscribed Tickets" msgid "My subscribed Tickets"
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco
msgid "My tickets in process"
msgstr ""
#: app/assets/javascripts/app/controllers/_integration/nagios.coffee #: app/assets/javascripts/app/controllers/_integration/nagios.coffee
msgid "Nagios" msgid "Nagios"
msgstr "" msgstr ""
@ -6022,7 +6026,7 @@ msgid "Navigation"
msgstr "" msgstr ""
#: app/controllers/concerns/creates_ticket_articles.rb #: app/controllers/concerns/creates_ticket_articles.rb
msgid "Need at least article: { body: \"some text\" }" msgid "Need at least an article body field."
msgstr "" msgstr ""
#: app/controllers/application_controller/handles_devices.rb #: app/controllers/application_controller/handles_devices.rb
@ -7064,7 +7068,7 @@ msgid "Pending reached"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee #: app/assets/javascripts/app/models/ticket.coffee
msgid "Pending reminder reached for Ticket |%s|" msgid "Pending reminder reached for ticket |%s|"
msgstr "" msgstr ""
#: app/assets/javascripts/app/models/ticket.coffee #: app/assets/javascripts/app/models/ticket.coffee
@ -10697,10 +10701,6 @@ msgstr ""
msgid "Your role cannot create new ticket. Please contact your administrator." msgid "Your role cannot create new ticket. Please contact your administrator."
msgstr "" msgstr ""
#: app/assets/javascripts/app/views/dashboard/stats/ticket_in_process.jst.eco
msgid "Your tickets in process"
msgstr ""
#: app/assets/javascripts/app/controllers/_ui_element/richtext_additions/embed_video_button.coffee #: app/assets/javascripts/app/controllers/_ui_element/richtext_additions/embed_video_button.coffee
msgid "Youtube or Vimeo address" msgid "Youtube or Vimeo address"
msgstr "" msgstr ""

View file

@ -104,7 +104,7 @@ RSpec.describe 'Ticket', type: :request do
expect { post '/api/v1/tickets', params: params, as: :json }.not_to change(Ticket, :count) expect { post '/api/v1/tickets', params: params, as: :json }.not_to change(Ticket, :count)
expect(response).to have_http_status(:unprocessable_entity) expect(response).to have_http_status(:unprocessable_entity)
expect(json_response).to be_a_kind_of(Hash) expect(json_response).to be_a_kind_of(Hash)
expect(json_response['error']).to eq('Need at least article: { body: "some text" }') expect(json_response['error']).to eq('Need at least an article body field.')
end end
it 'does ticket create with agent - article.body set to empty string (01.03)' do it 'does ticket create with agent - article.body set to empty string (01.03)' do
@ -120,7 +120,7 @@ RSpec.describe 'Ticket', type: :request do
expect { post '/api/v1/tickets', params: params, as: :json }.not_to change(Ticket, :count) expect { post '/api/v1/tickets', params: params, as: :json }.not_to change(Ticket, :count)
expect(response).to have_http_status(:unprocessable_entity) expect(response).to have_http_status(:unprocessable_entity)
expect(json_response).to be_a_kind_of(Hash) expect(json_response).to be_a_kind_of(Hash)
expect(json_response['error']).to eq('Need at least article: { body: "some text" }') expect(json_response['error']).to eq('Need at least an article body field.')
end end
it 'does ticket create with agent - missing article (01.03)' do it 'does ticket create with agent - missing article (01.03)' do
@ -483,7 +483,7 @@ RSpec.describe 'Ticket', type: :request do
post '/api/v1/tickets', params: params, as: :json post '/api/v1/tickets', params: params, as: :json
expect(response).to have_http_status(:unprocessable_entity) expect(response).to have_http_status(:unprocessable_entity)
expect(json_response).to be_a_kind_of(Hash) expect(json_response).to be_a_kind_of(Hash)
expect(json_response['error']).to eq('Need at least article: { body: "some text" }') expect(json_response['error']).to eq('Need at least an article body field.')
end end
it 'does ticket create with agent - minimal article and attachment with customer (01.13)' do it 'does ticket create with agent - minimal article and attachment with customer (01.13)' do

View file

@ -12,7 +12,7 @@ RSpec.describe 'Dashboard', type: :system do
expect(page).to have_css('.ticket_escalation > div > div.stat-title', text: %r{Mood}i) expect(page).to have_css('.ticket_escalation > div > div.stat-title', text: %r{Mood}i)
expect(page).to have_css('.ticket_channel_distribution > div > div.stat-title', text: %r{Channel Distribution}i) expect(page).to have_css('.ticket_channel_distribution > div > div.stat-title', text: %r{Channel Distribution}i)
expect(page).to have_css('.ticket_load_measure > div > div.stat-title', text: %r{Assigned}i) expect(page).to have_css('.ticket_load_measure > div > div.stat-title', text: %r{Assigned}i)
expect(page).to have_css('.ticket_in_process > div > div.stat-title', text: %r{Your tickets in process}i) expect(page).to have_css('.ticket_in_process > div > div.stat-title', text: %r{My tickets in process}i)
expect(page).to have_css('.ticket_reopen > div > div.stat-title', text: %r{Reopening rate}i) expect(page).to have_css('.ticket_reopen > div > div.stat-title', text: %r{Reopening rate}i)
end end

View file

@ -112,7 +112,7 @@ class FirstStepsTest < TestCase
) )
watch_for( watch_for(
css: '.active.content .js-activityContent', css: '.active.content .js-activityContent',
value: 'Nicole Braun created Article for Test Ticket!', value: 'Nicole Braun created article for Test Ticket!',
timeout: 35, timeout: 35,
) )