Chunks Used in Chat #6

3 chunks from 2 documents

Managing Localisations in Harmony
Chunk #0
Nov 06, 2025
### **Introduction** In this article you’ll learn about: - How localisations work in Harmony - Editing, adding or deleting your localisations **Table of Contents** * * * **The Localisation Service is now Available in Harmony** Localisations is now accessible through the following URLs: - **Staging** : [https://harmony-staging.tripledotapi.com/admin](https://harmony-staging.tripledotapi.com/admin) - **Production** : [https://harmony.tripledotapi.com/admin](https://harmony.tripledotapi.com/admin) # What is Localisation? Localisation is the process of translating and adapting a product to a local market. Localisation goes beyond simply translating the text, as during the localisation process, dates, currencies and general content is adapted to a specific audience. Localisation is key for a growing business, as it increases the potential to get more players and increase the revenue. Through Harmony, you can manage the localisation of your game. ![](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/2022-07-20_19-05-54.png?version=1&modificationDate=1708425488674&cacheVersion=1&api=v2&width=777&height=331) # Managing Localisations in Harmony Harmony is the container to centralise and unify all Game Server and Hawk Applications. In there, you’ll be able to find the applications for your games. ![image-20240220-110856.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20240220-110856.png?version=1&modificationDate=1708427340038&cacheVersion=1&api=v2&width=755&height=412) To access the Localisation Service for your game: 1. Access Harmony, and click your game in the home page ![image-20240220-115234.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20240220-115234.png?version=1&modificationDate=1708429957782&cacheVersion=1&api=v2&width=830&height=346) 1. On the left side bar, click the drop-down on Localisations to open all the settings available In the dropdown menu, there are four items available: - **Languages** : the list of languages available for translation in your game - **Translations (Live)**: read only page where you can see which translations are currently live - **Translations (Test)**: page where you can upload your translations and test them in a test environment - **AI Translations** : page where you can utilise AI assistance for your translations **Settings Config** is still available in Game Server Languages Inside Languages, you can visualise the list of languages configured in Settings for your game. English is the source and default language and it cannot be deleted. The **In Use** column allows you to see in which configuration this language is being used. ![image-20250408-095306.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-095306.png?version=1&modificationDate=1744105988619&cacheVersion=1&api=v2&width=777&height=383) ### Adding a New Language 1. To add a new language, click the **[New]** button on the upper right side of the screen. A new pop-up will open with a dropdown list of languages. 2. Select your language from the dropdown list. You can also search by name or language code. 3. Click **[Save].** ## Translations (Test) From this section, you can: - Manage your existing translations - Download translations in CSV format - Download translations from AI - Preview and test your translations in a test build - Search and filter ### Adding New Translations There are four ways to add new translations: - Manually - Via a CSV file upload - With AI Assistance - Via internal API ### **Adding a new key manually** 1. Navigate to **Translations (Test)** and click **[Add Key]** button. 2. Add a unique name for your key, select the type of content and add a description. 3. Under _English EN_, type in the English source text. Click **[Add]**. 4. A new table named **Changed Keys** will appear. From there you can add your translations manually or make changes. The system will highlight in yellow your changes. 5. Once you’re done, click **[Save].** Your localisation will be uploaded and testable in a test build. 6. When your translations have been tested in a test build, you’ll be able to push them to Production. Read [Applying your localisations to live](https://tripledotstudios.atlassian.net/wiki/spaces/KB/pages/3230760961/Managing+Localisations+in+Harmony#Translations-(Live)---Applying-your-localisations-to-Live) to know more. ### Editing your Translations From **Localisations: Translations (Test)**, you can also edit your translations and their description. 1. Double-click on the text you’d like to edit. An editable field will appear so that you can amend your translation 2. A new table will appear above with the changes highlighted **in green**. Review them and click **[Save]**. Please note that these changes **will be applied only to your test environment.** 3. If you’d like to apply your changes to Live, click **[Review Difference].** This button will be active only if you clicked **[Save]** before. 4. Review the changes, and click **[Apply to Live]** to push your changes to Production. Changes will be highlighted in green. #### Deleting and Undoing Changes in your Translations If there’s any edited key you don’t want to apply to live, you can undo the changes using the **[yellow undo button]** ![image-20250408-111255.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-111255.png?version=1&modificationDate=1744110777675&cacheVersion=1&api=v2&width=777&height=381) In **Translations (Test)**, you can delete keys by using the red Trash Can button, but if you mistakenly delete a key, you can use the **[undo button]** to recover them: ![image-20250408-111354.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-111354.png?version=1&modificationDate=1744110837141&cacheVersion=1&api=v2&width=777&height=381) ### Uploading a CSV file with Translations The CSV upload feature allows you to bulk upload a series of translations in different languages. 1. To upload a CSV, navigate to **Translations (Test)** and click **[Upload CSV]** ![image-20250408-122738.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-122738.png?version=1&modificationDate=1744115260141&cacheVersion=1&api=v2&width=777&height=430) 1. Upload your CSV file. The CSV upload allows you to: - Add keys & translations - Add and update translations for existing keys   **Which format should my CSV file have?** The format of the CSV file must have the following fields: - Key - Type - Desc (description, the field can be empty) - Language codes following ISO-639-1 convention (2 letters/2 letters + locale, for example: `pt-BR`) **Other Considerations** - The **[CSV Upload]** button might be disabled. To enable it, please apply a change manually beforehand. - The CSV file **must** be UTF-8 encoded - Any new language must be created manually in the Languages section in advance. If the language does not exist, the upload will fail. - Sometimes Excel/Google Spreadsheets add quotation marks at the start of your CSV file. Please remove them if this happens, as this will cause the upload to fail 4. Once your translations have been tested in a test build, you’ll be able to push them to Production. Read **Applying your localisations to live** to know more. If there is any validation error in your uploads, you can use the checkbox **Show only keys with validation errors**. This checkbox appears only if there are any validation errors to review after clicking **[Save]**, and it will mark in red your errors for better visualisation and more efficient error fixing. ![image-20250408-122930.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-122930.png?version=1&modificationDate=1744115372111&cacheVersion=1&api=v2&width=777&height=422) ### Downloading Translations You can download the translations in CSV format on your local system. ![image-20250408-123337.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-123337.png?version=1&modificationDate=1744115619172&cacheVersion=1&api=v2&width=777&height=444)
Managing Localisations in Harmony
Chunk #1
Nov 06, 2025
**Generating AI Translations** The AI Translations feature enables users to automate the translation of key text fields within the system. You can generate translations for multiple languages directly from the interface. 1. Go to the _**Translations (Test)**_ Page. 2. Click on **[Download with AI]** to open the translation request popup. 3. Select Target Languages: 4. Click **[Confirm]** to send the request to AI. After clicking the **[Confirm]** button, new translations will be generated shortly. A message appears: "Operation has been successfully finished." You can track the progress on the AI Translations page. ### **Accessing the AI Translations Page** The AI Translations page lists all the translations generated using AI. You can track the progress of the requested AI-assisted translations from the same page. 1. From the left sidebar, go to Localisations \> AI Translations. The page displays a table with the following columns: ### **Downloading AI Translations** 1. Locate the file in the AI Translations table. 2. If the status is "Generated", click the Download button. 3. The CSV file will have the same format as the current Download/Upload feature, making it easy to update localisations. If the CSV file is not getting downloaded for updating localisations, try the following step: Right-click the **Download** button and click the **SaveLink As..** option. The file will be saved at the required location and you can update the file. ![image (7).png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image%20(7).png?version=1&modificationDate=1748873604575&cacheVersion=1&api=v2&width=777&height=207) ### **Deleting AI Translation Files** 1. In the AI Translations table, locate the file. 2. If the status is _"Generated", “Scheduled”,_ or _"Failed"_, the delete button is available. 3. Click the **delete** icon to remove the file. You will receive a confirmation pop-up for deleting. ![image-20250408-133527.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-133527.png?version=1&modificationDate=1744119329057&cacheVersion=1&api=v2&width=777&height=378) ## Translations (Live) - Applying your localisations to Live To ensure quality and consistency among localisations, Harmony first uploads the localisations in a test environment, and **once that they’ve been verified, they can be pushed to a live build.** 1. Under **Translations (Test),** you’ll find a button called **[Review Difference].** This button opens a panel where you’ll visualise the changes made since the last push to live. The date of the last push to live can be found on the upper right side of the page. 2. Review the changes and click **[Apply to live]**. Lines marked in green show the new keys that have been added. The changes will then be pushed to Production, and you’ll be redirected to **Translations (Live)**, a read-only page where you’ll be able to visualise what is currently in Production. During this process, if there are any keys to be deleted, they will be deleted too. If there are no differences between Test and Live, you’ll be shown a message stating this. ![image-20250408-141041.png](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20250408-141041.png?version=1&modificationDate=1744121443001&cacheVersion=1&api=v2&width=777&height=400) Any change that you’d like to make to your translations needs to be done through **Translations (Test)** and pushed to Production through the **[Apply to Live]** button. You can only download translation files or apply filters on the **Translations (Live)** page. * * * ## Using the Internal API The Localisation API allows you to programmatically interact with the Localisation App to synchronise localisation data, visualise and export localisation keys and languages and their statuses. To use the API: 1. Authenticate with your personal token ([obtained from your personal profile in SSO Server](/wiki/spaces/KB/pages/3292790799/Generating+SSO+User+Tokens)) 2. Get your `app_id`, which is the unique identifier of your game. For more details, see [this Confluence page](/wiki/spaces/GS/pages/3122561158/Public+App+IDs). 3. Use the following endpoints: [https://backstage.tripledotapi.com/catalog/localisations-server/api/internal/definition](https://backstage.tripledotapi.com/catalog/localisations-server/api/internal/definition) * * * ## Settings Configs Settings Configs is available in Game Server In the section Settings Configs, you’ll find the configurations for localisations in Game Settings. The column **In Use** allows you to see in which Setting this particular configuration is being used. ![](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20220728-091643.png?version=1&modificationDate=1708425484996&cacheVersion=1&api=v2&width=442&height=204) #### Creating a New Config When you create a new localisation Config, you can edit the language settings for the game, including the default language, the languages supported by the game, and the order of the languages in the pop-up when selecting them. 1. Click the green **[+New]** button on the left upper corner. 2. Add a new name for your Config. 3. Under Languages supported by the client, you can add the languages you want the game to support. The default configuration is presented below, but you can add as many languages as you need using the dropdown and clicking **[Add]**. 4. Under Client Default Language, you can modify the language presented to the player when opening the game. 5. You can also select whether you want to send a pop up to the player when they open the game, and order the list of languages presented. The list is presented in the current state, so drag and drop to organise, or move to the **Removed** section to remove languages. 6. Once you’re happy with the settings, click **[Save]**. #### Using your Config in Game Settings Once you’ve created your Config, you can include it in Base Config, Overrides or A/B Experiments. Simply enable the field, select your Config, and click **[Save]**. ![](https://tripledotstudios.atlassian.net/wiki/download/thumbnails/3230760961/image-20220728-133652.png?version=1&modificationDate=1708425483806&cacheVersion=1&api=v2&width=681&height=271) * * * ## Localisations in Hawk Some features in Hawk, such as Campaigns and App Links can be localised. Localisations are synchronised **every hour** with Hawk, but you can force this process too. ### Synchronising Localisation Keys with Hawk In order to add localisation keys for Hawk: 1. Add your localisation keys to Localisation App as described in this guide. 2. Navigate to **Hawk \> Localisations**. A page will open with the existing keys, their usage, and the last synchronisation date. As stated above, localisations are synchronised hourly with Hawk, but you can force this process by clicking the **[Synchronize]** button on the upper right corner. 3. Once your keys have been synchronised, they will be available to be used in any Hawk feature that allows localisation. * * * ## Localisations FAQ - **What happens if a translation is missing in a target language?** - **Can I use emojis in localisations?**
Rules in Game Server
Chunk #1
Nov 06, 2025
Setting up Named Rule Groups 1. Navigate to Named Rule Groups. In this page you’ll be able to visualise the already existing groups, and which rules compose them. Click the green **[+ New]** to create a new rule group. You can also duplicate, edit, or delete them using the actions available in the right side of the screen. 2. Give the group a name, and include your rules or sections of rules. 3. In order to use your Rule Group, navigate to any entity with rules, and click **[Add Named Rule Group].** From there you can select your Rule Group without having to create it from scratch again!&nbsp; - The valid operators for Named Group Rules are IN/NOT IN - Named Rule Groups can be used in combination with other rules ### Creating Named Rule Groups from Rules You can also create Named Rule Groups directly from the Rules section in your entity. To do so: 1. Create your Rule, and click the grey **[3 dots button]** 2. Click **[Create Named Rule Group]** 3. Assign a name to your new Named Rule Group, and select whether you want to replace the section with the Named Rule Group 4. Your new Named Rule Group will be available to use and you will be able to edit it from Named Rule Groups section in Game Server * * * # List of Available Rules Below you’ll find a comprehensive list of all available rules with their conditions and the data available for each of them:&nbsp; | **Rule** | **Available conditions** | **Data** | **Description** | | **Country** | - IN - NOT IN | Country list | Country where the player is located | | **Language** | Language list | Language of the device | | **Platform** | Multi-select: - Other - iOS - Android - Amazon | OS of the player device | | **Cohort day** | - \>= - \<= - \> - \< | Numeric input | Number of days starting from 12AM in local time zone | | **User Ids** | - IN - NOT IN - \>= - \<= - \> - \< | &nbsp;Text input | User ID | | **Current game version** | Current version of the game in the player’s device | | **Install game version** | Version of the game originally installed in the player’s device | | **Previous game version** | Previous version of the game installed in the player’s device | | **Install date (UTC)** | - \>= - \<= | Date picker | Based on UTC time (Server time) | | **Install date (Local timezone)** | - \>= - \<= | Date picker | Based on local time that the Client sent in `/init` call `"utc_offset": "-11:00:00"` | | **OS version** | - IN - NOT IN - \> - \< - \>= - \<= | Text input | Operative system of the player’s device Example: - Android OS 11 / API-30 (RP1A.200720.012/A715FXXS4BUC1) - iPhone 12,4 &nbsp; | | - **IDFAs** - **IDFVs** | - IN - NOT IN | Text input | &nbsp; | | **Device model** | - LIKE - NOT LIKE | Text input. Regex can be used. | Example: samsung SM-A715F | | **LAT user \*** | - | - | If added, means LAT = true | | **Experiment variant** | - IN - NOT IN | 1st level: all existing A/B experiments 2nd level: variants in specific experiment | GS will search whether player participated in specified variant of the experiment. Archived participations are not counted in the rule. Multiple experiment participations can be added via OR relation | | **Player Bucket&nbsp;** | - IN - NOT IN | _\*User Id is divided by 100_ Lower bound Upper bound Bounds can span from 0 to 99. | Bounds, ex. 0-9, means that players with ids end on _ **xxx00 - xxx09** _ will match the rule. | | **Campaign Name** | - CONTAINS - DOESN’T CONTAIN - IS BLANK - IS NOT BLANK | Case sensitive Partial search | Name of the ad campaign Note: When the user selects IS BLANK, the rule will match if there is no entity provided. | | **Media source** | - IN - NOT IN - IS BLANK - IS NOT BLANK | Case sensitive Full search | Entity used to display ads | | **Onboarding mode** | == | &nbsp;Text input | Available only for **Duplica** New object can be sent from client in `/init` call. Any unknown attribute except **"onboarding\_mode"** will be ignored by server. "custom_attributes": { "onboarding_mode": "hello" } Note: - Data is stored in separate Duplica table `duplica_app_user_custom_attributes` - Once sent to the server, it is saved in DB and there is no need to send this info again (only if you need to change) - Server handles `"custom_attributes"` only from **Duplica players** , otherwise it sends a 500 error (custom table created only for Duplica) | | **Total payments amount** | - \> - \< - \>= - \<= - == | Single numeric decimal | Available only for **Blackjack, Duplica, Merge, PPC** | | **Last payment amount** | - \> - \< - \>= - \<= - == | Single numeric decimal | Available only for **Blackjack, Duplica, Merge, PPC** | | **Days since last payment** | - \> - \< - \>= - \<= - == | Single numeric decimal | Available only for **Blackjack, Duplica, Merge, PPC** | | **Days since previous visit** | - \> - \< - \>= - \<= - == | Single numeric decimal | **Calendar days** are counted. Calculations are based on “Last visit at” and “Previous visit at” values for device. | | **Sessions count** | - \> - \< - \>= - \<= - == | Single numeric decimal | Amount of sessions triggered by the user. Sessions is defined as as a period of play with no greater than a five minute break. | | **Debug IDs** | - IN - NOT IN | String \<=16 characters | &nbsp; | | **Device type** | - IN - NOT IN | Multi-select: - Phone - Tablet | Tablet/Phone is detected based on screen resolution and DPI that are sent by the client | | **Days since version update** | - \> - \< - \>= - \<= - == | Single numeric decimal | **Calendar days** are counted. Calculations are based on “App version updated at” value for device. | | **Version update date** | - \>= - \<= | Date picker | Based on UTC time (Server time) The purpose of this rule is excluding users who update their app their app to a version that supports a specific journey after that journey starts, so that they can continue playing the journey they’d been playing before updating their version. This information is updated when the user makes the first `/init` call to server with a new version. When this happens, the date & time of this first init call is captured as update date in the device record in the system. | | **Build variant** | - IN - NOT IN | Multi-select: - Default - Google - Samsung - Amazon - Apple - Apple - China | Platform used by the player | | **Device RAM capacity (MB)** | - \> - \< - \>= - \<= - == | Single integer | In `/init` call client sends `ram_capacity` parameter which allows to deliver special configs and A/B Experiments for Android Go clients (low-end devices). The value is in megabytes. | | **Player segment** | - \>= - \<= - \> - \< - == | Multi-select: list of segments synced from Hawk (the segments need to be created in Hawk beforehand) | Only active segments can be selected. | | **Days since Start At** | - \>= - \<= - \> - \< | Numeric input | **Usage** : When an A/B experiment has variant groups created using this rule, GS counts the number of days since the “Start at” date of the experiment and decides which group the user should be in. Game Server starts counting the number of days starting from 12AM in local time zone. This rule is available **only** as an A/B Experiment Variant Rule and cannot be used anywhere else. | | **City** | - IN - NOT IN | Dropdown with single value (only city available for now is London) | **Behaviour:** If a player belongs to the country in which the selected city is found (currently the only option is London), Game Server will send a request to GeoIP to check their city. The player matches the rule if GeoIP returns London as a city. | | **Player Buckets (NEW)** | - IN - NOT IN | Dropdown with single value | The purpose of this rule is to deliver configurations only to users who belong to specific player buckets. This information is retrieved from Harmony, which includes the list of bucket IDs a player belongs to in each response. When evaluating a rule that includes a Player Bucket condition, the system checks whether the player’s bucket list includes the specified bucket ID. If it does, the configuration is delivered. If not, the configuration is excluded from delivery. | ## \uD83D\uDCCB&nbsp; **Related articles** - Page: [Configuring Game-Specific 3rd Party Machine Learning Models in Game Server](/wiki/spaces/KB/pages/4580999169/Configuring+Game-Specific+3rd+Party+Machine+Learning+Models+in+Game+Server) - Page: [Configuring Embedded Machine Learning Models in Game Server](/wiki/spaces/KB/pages/4548263939/Configuring+Embedded+Machine+Learning+Models+in+Game+Server) - Page: [Ads Config: Configuring Ads in Game Server](/wiki/spaces/Innovecs/pages/4442063826/Ads+Config+Configuring+Ads+in+Game+Server) - Page: [File Configuration in Game Server](/wiki/spaces/Innovecs/pages/4441866278/File+Configuration+in+Game+Server) - Page: [File Configuration in Game Server](/wiki/spaces/KB/pages/4440228000/File+Configuration+in+Game+Server) - Page: [Rules in Game Server](/wiki/spaces/Innovecs/pages/4355850392/Rules+in+Game+Server) - Page: [Game Settings Configuration](/wiki/spaces/Innovecs/pages/3849912340/Game+Settings+Configuration) - Page: [Setting up A/B Experiments](/wiki/spaces/Innovecs/pages/3848602658/Setting+up+A+B+Experiments) - Page: [Managing Localisations in Harmony](/wiki/spaces/KB/pages/3230760961/Managing+Localisations+in+Harmony) - Page: [Generic Daily Challenges](/wiki/spaces/KB/pages/2933653553/Generic+Daily+Challenges) - Page: [Configuring Ads in Game Server](/wiki/spaces/KB/pages/2765029415/Configuring+Ads+in+Game+Server) - Page: [Rules in Game Server](/wiki/spaces/KB/pages/2668494860/Rules+in+Game+Server) - Page: [Setting up A/B Experiments](/wiki/spaces/KB/pages/2581889051/Setting+up+A+B+Experiments) - Page: [Game Settings Configuration](/wiki/spaces/KB/pages/2580021328/Game+Settings+Configuration)