View on Asset Store (opens in new tab)
Package details
- Latest version
- 1.0.2
- Last updated
- First released
- Unity version
- 6000.0.42 or later
- Package size
- 17.8 MB
- Files
- 34
- Favorites
- 9
- Views in the past week
- 7
Price tracking
- Last checked
- Tracked since
- Lowest recorded
- Free on
Keywords
Tooltip Localization System mini
Show localized text tooltips supporting key rebinding & dynamic variables
Affiliate link · Purchases support this site
Price history
Last 6 months
USDAsset preview
1 / 8
Tooltip Localization System mini screenshot 1
About this asset
Tooltip Localization System Mini for Unity projects using TextMeshPro is based on a CSV + ScriptableObject setup. Reads a CSV file, returns the rows, switches fonts, and caches everything for optimization. Made for solo devs and indie teams who want to keep text strings out of scripts and manage translations through external editors. 📄 Full documentation (eng) (укр)
The full original version of the system is used in Automatic Tutorial Maker →
FEATURES:
- CSV-based translations. Edit in Excel, Google Sheets, or any CSV editor. Default: ; delimiter, UTF-8, " text qualifier.
- 12+ languages included & saving language between sessions. English, Chinese, Japanese, German, French, Spanish, Portuguese, Italian, Ukrainian, Polish, Turkish, Korean. Add custom via Language enum or column name.
- Automatic font switching. Assign fonts per language (e.g., NotoSansTC for Chinese), auto-applies on change. Includes Noto Sans CJK + Audex fonts with licenses.
- Dynamic placeholders. Insert variables: {playerName}, {score}, {anyVariable} → filled at runtime. There is a Parameter Selector for assigning a reference to any custom variable of any custom component.
- TextMeshPro tags support. Use <color=#FF0000></color>, <sprite=0>, emojis 😊 directly in translations.
- Static Mode. Cache text objects, auto-update on language change, including font switching (efficient for menus/UI)
- Dynamic Mode. Read strings per-frame, no built-in font switching (for scores/timers, cached lookups)
CREATE TEXT TOOLTIPS:
The system can be used to show text tooltips that support value substitution. For example, add the entry "Press {key} to interact" to the table, along with its translations. Then call ReplacePlaceholders in your script, specifying the row containing the text and passing the variable for substitution. The variable can be a system-defined key or one reassigned by the player.
During translation, the system replaces the {key} placeholder with the variable. In different languages, placeholders may appear in different positions to preserve natural phrasing. Multiple placeholders can exist in a sentence, but their order must be maintained.
DEMO:
Open DemoScene to see all features in action.
STRUCTURE:
🗒 A CSV table with translations. The first row contains language names, each language has its own column. Retrieve specific text by accessing rows.
🔗 A Scriptable Object. It stores the CSV as a Text Asset and handles operations: parses it into an array and contains methods for further reading. This can be called from other scripts, for example:
InitializeLocalizator(); // Parses CSV, remembers current language on start, let's say "Eng"
GetStringText(2); // Returns string from row 2 and current language column = "menu"
FillTextObject(2, textObj); // Passes to textObj.text = "menu"; caches textObj and row
ChangeLanguage("Jap"); // Overwrites current language
TranslateAllTexts(); // Replaces text for all cached objects (same row, different column). Having text objects in cache allows changing their font right there, for example, if hieroglyphs are needed
At localization to Chinese, using Traditional Chinese is recommended.
USAGE:
- Fill the CSV table with your texts and translations
- On Start() > add InitializeLocalizator call
- Bind ChangeLanguage method to buttons that switch language
- When spawning text > call FillTextObject for it, so it translates itself and changes font automatically
- If you just need the value > call GetStringText
💡Maintain a column in the table with text keys to access rows by them rather than by indices:
using LocalizationSystemMini;
[SerializeField] private InputStringsScriptableObject textStrings;
var hi = textStrings.GetStringTextByKey("hi_key");
var userName = "..."; // Player name
textObj.text = $"{hi}, {userName}!";
// If needed, update the font manually
textObj.font = textStrings.GetCurrentFont();
This way the code will have access to localized text and output it to the scene.
➕ To add a language and edit translations, just open the CSV. You can translate an entire column by running it through a translator. Or work with localizers who don't have access to/affinity for the inspector.
From the publisher's Asset Store listing.
Technical details
- Developed using Unity 6
- The core system is lightweight, while font samples with licenses occupy 99.7% of package
- TextMeshPro is required in the project for this system to function properly
P.S. There’s already a solution based on CSV: Localization Package from Unity, which includes most of the possible features. This system shows a simpler version for indie projects, with some unique advantages. For instance, it can cache a pair of TMP_Text and its string, so that when a translation is updated, all pairs are refreshed automatically, including the font. It supports languages with any name (you can add a column like “Elvish” and reference it by “Elvish”). And it uses only one ScriptableObject as a "middleman", accessible from anywhere, so you don’t need to deal with a bunch of components.
Compatibility
| Unity version | Built-in | URP | HDRP | Custom |
|---|---|---|---|---|
| 6000.0.42f1 | Compatible | Compatible | Compatible | Compatible |
TextMeshPro is required in the project for this system to function properly.
As listed on the Asset Store.