Documentation

Configure AI Translations for your ServiceNow instance.

Use this guide to install the app, define translation scope, run scheduled or on-demand translations, configure message and chat translation, review reports, and manage system properties.

Installation

  1. Activate any of the out-of-box I18N: <language> Translations plugins that you require.
  2. Add any additional languages to the Language preferred_language field on the User sys_user table.
  3. If translating Knowledge Articles, activate the com.glideapp.knowledge.i18n2 plugin.
  4. Install the AI Translations application.
  5. Switch to the AI Translations application scope.
  6. Go to AI Translations → Properties.
    • Choose the default service and enter the API key for that service.
  7. Go to AI Translations → Scheduled Jobs → Populate all Languages.
    • Click Execute Now.
  8. Go to AI Translations → Definitions.
    • Activate the definitions you require. Add additional definitions as needed.
  9. Switch to the Global application.
    • Go to AI Translations → Definitions.
    • Set your filter to Type = Scheduled Translation.
    • Go into each record individually.
    • If you see the info message Click here to update the table definition for: <table>, click the link and update the table's application access.
      • Go to the Application Access tab.
      • Set Accessible from to All application scopes.
      • Set Can read, Can create, and Can update to true.
  10. Go to AI Translations → Scheduled Jobs → Process AI Translations and click Execute Now.

Scheduled translations

The Process AI Translations scheduled job runs weekly on Saturday at 1 AM by default. This can be changed if necessary.

Scheduled Job: Process AI Translations

Link: https://your_instance.service-now.com/sysauto_script.do?sys_id=6afeeaccdb8e6700458ccae3b996197a

The scheduled job processes all active Translation Definitions where Type is set to Scheduled Translation.

  • Query the configured table based on the definition condition.
  • Insert a new row into the Translation table for each Field to Translate and Target Language pair.
  • Each row attempts to locate an existing translation using the configured Primary Keys.
    • If an existing match is found in the system, State is set to Translated and Translation Action is set to Existing Translation.
    • If an existing match is not found, State defaults to Pending Translation. These records are processed after all definitions finish processing.
  • After all definitions are processed, the application translates rows in a state of Pending Translation.
    • First, it searches the Translation and Translation Segment tables to see if an existing translation is already available. If one is found, that translation is reused instead of reaching out to the translation service.
    • If an existing translation is not found, the app reaches out to the translation service and obtains a translation. If the Type is HTML, the Original Text (HTML) field is broken into Translation Segments. Only segments with a Type of Text are sent to the translation service. HTML and special characters are not sent, which keeps the character count down.
  • After translations are acquired, approval notifications are sent to any Approval Users and/or Approval Groups related to the Translation Definition Target.
    • Approvers can modify the translation before approving.
  • Once approval is obtained, or no approval is required, the translated text is written to the appropriate table based on the Translation Target. State is then set to Translated, and the record can be used to assist future translations.

Here is an example of one of the definitions that comes standard.

Scheduled translation definition example Scheduled translation fields example Scheduled translation target languages example Scheduled translation target settings example

On-demand translations

On-demand translations can be obtained by a user on any table specified in the Translation Definition table.

A user can obtain a translation by using the Translate UI Action, which by default is accessed as a Form Context Menu by right-clicking the header.

This context option appears only if a definition is defined as On Demand for the table the user is currently on.

When a user clicks the Translate action, a form opens with a set of translation options.

On-demand translation menu action example
  • Source Language: Language you are translating from.
  • Target Language: Language you are translating to.
  • What data do you want to translate?
    • Existing Data: Data saved at the database level for this record.
    • New data not yet saved: Data that has been typed on this form but not saved.
  • Where to display the translation?
    • Display below field: The translation is displayed in an info message below the field being translated.
    • Update field value: The translation overwrites any value in the field being translated.
  • Fields to translate: This is a list of fields as defined in the Translation Definition Fields for that table. The checkbox next to each field defaults to true or false based on the On Demand Default field.

This is what the output would look like for this translation.

On-demand translation dialog example

Here is an example of one of the definitions that comes standard.

On-demand translation language selection example On-demand translation results example On-demand translation final record example

Chat translations

Users can chat in any language they prefer with chat translations. Every user in the chat can see messages in their own language.

This works for end users chatting with service desk agents through a Service Portal, one-on-one agent chats, and large chat rooms with users in many languages.

To utilize chat translations, go to the Translation Definition for the Live Feed Message live_message table and set Active to true. Also make sure the Target Languages are populated and active.

End user and agent views of translated ServiceNow chat conversation

Message locator

Translation Definitions with Type set to Message Locator are used to fully populate the standard Message sys_ui_message table.

Message tags are located in UI Pages, UI Macros, Service Portal Widgets, and other places. In code, they look like gs.getMessage("message here") and ${message here}.

Message locator configuration example Message locator scan result example

Here is an example of one of the definitions that comes standard.

Message locator script include example Message locator generated message records example

Homepage reports

Report Name Description
Overall Translation Progress
Type: Pie; Group by: State
Use: View the percentage of your instance that is translated.
Overall Translation Progress by Table
Type: Bar; Group by: Translation Definition.Table; Stack by: State
Use: View the overall progress for each table you are translating.
Translation Progress - Excluding Existing Translations
Type: Pie; Group by: State; Filter: Translation Action != Existing Translation
Use: Similar to Overall Translation Progress but ignores existing translations already in your system so you can view just what this application is translating.
Translation Progress by Table - Excluding Existing Translations
Type: Bar; Group by: Translation Definition.Table; Stack by: State; Filter: Translation Action != Existing Translation
Use: Similar to Overall Translation Progress by Table but ignores existing translations already in your system so you can view just what this application is translating.
Translation Counts
Type: Pivot Table; Row: Translation Action; Column: Translation Definition.Table
Use: View the number of records being translated on each table.
Translations Pending Approval
Type: List; Group by: Translation Definition.Table; Filter: State = Awaiting Approval
Use: See all translations awaiting approval and who they are waiting on.
Characters Translated by Translation Service
Type: Trend; Group by: Translation Definition.Type; Trend by: Translated On; Per: Month
Use: View the count of characters translated per month for the last 12 months broken out by Scheduled and On Demand Translations.

Table reference

The table reference contains the full table and field details for the AI Translations application, including Translation, Translation Definition, Translation Definition Field, Translation Definition Target, Primary Key, Translation Memory, Translation Segment, Translation Approval, External Translation, Translation Exception, Translation Exception Language, Translation Set, Translation Request, Domain, GeoFluent Language, and AI Translation Setup Component.

Open table reference

Properties

All properties prefixed with x_271327_automated.

System Property Description
automated_translation.service
Default service used to perform your translations.
Type: choice list
Choices: GeoFluent,Lionbridge
geofluent_endpoint
Select the endpoint used to connect to the GeoFluent API.
Type: choice list
Choices: api,api-eu
restrict_translated_instance
If you want to restrict scheduled translations to a single instance, populate the instance name here. Useful if you want to translate your production instance and not sub-prod instances.
Type: string
automated_translation.sleep
Delay between each translation when processing scheduled translations. (in milliseconds) (0 = no delay)
Type: integer
delete_old_translation_records
Delete 'On-Demand' and 'Cancelled' Translations that are a number of days old. (0 = disabled)
Type: integer
Ignore cache: Yes
disable_translations
Enable this to disable the application from reaching out to your translation service to acquire translations. Useful for your initial run where you want to get a count of characters/words that will be translated before sending them to the service.
Type: true | false
do_not_utilize_prior_translations
Enable this to disable the application from checking for past translations before reaching out to your translation service.
Type: true | false
wait_for_full_translation
If multiple fields are being translated on the same record, wait for all translations to be complete before creating the target record.
Type: true | false
used_prior_translation.require_approval
Bypass 'Post-Translation Approval' if a Translation record is set to 'Used Prior Translation'
Type: true | false
auto_publish_draft_knowledge
Auto-publish 'draft' knowledge articles that match translation conditions if parent is Published.
Type: true | false
dynamic_translation_pre_translate_detect
When using the 'Translate Text [GeoFluent]' Flow within Dynamic Translation, check translation memory to see if text is already translated before utilizing the translation service. This flow is primarly used in Agent Chat and dynamically translating Virtual Agent.
Type: true | false
Ignore cache: Yes
should_protect_html_attributes
Tokenize HTML attributes before sending for translation.
Type: true | false
Ignore cache: Yes
on_demand.autodetect
Allow the option for On-Demand translations to auto-detect the source language.
Type: true | false
on_demand.target_language
Default the Target Language for On-Demand translations to the user's language.
Type: true | false
html_segmentation_version
Version of HTML segmentation. 1=Parse HTML in order. Older version that has some issues fixed in v2. 2=Segment HTML from outter tags to in. Better solution when using multiple MT engines.
Type: choice list
Choices: 1,2
automated_translation.data_to_translate
Default value for the question "What data do you want to translate?" for On Demand translations.
Type: choice list
Choices: Saved data,Form data
automated_translation.where_to_display_translation
Default value for the question "Where to display the translation?" for On Demand translations.
Type: choice list
Choices: Display below field,Update field value
automated_translation.email_cutoff
Do not translate emails past this phrase. Useful to stop translating automated replies from the system.
Type: string
attachment_file_types
File types to process when translating attachments
Type: string
enable_logging
Enable logging for the AI Translation application.
Type: true | false
enable_logging.service
Log every call to the translation service
Type: true | false
enable_logging.wait
Log if a completed translation is waiting on another translation based on the 'x_271327_automated.wait_for_full_translation' property.
Type: true | false
domain.enabled
Enable Domain Separation to allow each domain to utilize their own API keys.
Type: true | false
domain_iterator
Enable a second Scheduled Job for 'Process AI Translations' using the Domain Iterator [can_iterate] functionality. This allows each iteration to only process records for the current domain the job is running in.
Type: true | false
Ignore cache: Yes
geofluent_account_key
GeoFluent API Account Key
Type: password2
geofluent_account_secret
GeoFluent API Secret Key
Type: password2
lionbridge.prod_instance_name
Production Instance Name. Should match the system property "instance_name" in your production environment. This is used to determine if the PROD or SUB-PROD connection should be utilized.
Type: string
lionbridge.client_id
Lionbridge Client ID for PROD
Type: string
lionbridge.client_secret
Lionbridge Client Secret for PROD
Type: password2
lionbridge.providerId
Lionbridge providerId for PROD
Type: string
lionbridge.client_id.subprod
Lionbridge Client ID for SUB-PROD
Type: string
lionbridge.client_secret.subprod
Lionbridge Client Secret for SUB-PROD
Type: password2
lionbridge.providerId.subprod
Lionbridge providerId for SUB-PROD
Type: string
lionbridge.internal_user_id
Username from a sys_user record. Used to generate files to send to Lionbridge when utilizing the file based transfer. User needs the 'x_271327_automated.translate' role. Setting 'Internal Integration User' to true is recommended.
Type: string
lionbridge.internal_user_password
Password from the sys_user record referenced in 'x_271327_automated.lionbridge.internal_user_id'. Used to generate files to send to Lionbridge when utilizing the file based transfer.
Type: password2
automated_translation.google.api_key
Google Translate API Key
Type: password2
automated_translation.microsoft.api_key
Microsoft Translate API Key
Type: password2
max_translations_per_run
Max translations to process per scheduled job run.
Type: integer
save_approved_translations_only
Only store translations in the 'Saved Translations' table that have had a Post-Translation Approval.
Type: true | false
use_existing_translation_if_unchanged
Auto-approve a translation if it remains unchanged.
Type: true | false