***Localization*** Need a help for fonts etc, I'm translating a game into Mongolian.

bagi576

Farmhand
Dear all,
I'm very pleased to be a member of great community and player of this "huge" wonderful game. Neitherless, i wanted to translate whole game into my native language Mongolian. But i'm gonna need a huge favor from you guys. Font section is a problem for me, because only we do use characters/letters which is unique (i'm sorry if i say wrong) Ү ү, Ө ө (please see an attachment).
Only thing is making me worse is fonts and bitmaps. I was wondering if there is someone who can help me with it, i would be very grateful. Please feel free to mail me or reply here.

Thank you for reading and i'm looking forward for your help.

bagi
 

Attachments

You can drop a mail to ConcernedApe.
As far as I know, the game was originally written by C#.
You can confirm with the developer to get more information.
 

MogBeoulve

Local Legend
I think it's great that you are trying to do this, but probably like many other people here, I haven't the faintest clue how to help.
 

bagi576

Farmhand
Dear all, thank you for all your kind message. I really appreciate everyone and future ones too :)
I think it's better if i send a mail to ConsernedApe.

Otherwise, i needed a pixelmaping for fonts. ENG alphabet has a 26 letters. We do have a 35 letters, all cyrillic. That is the "best" part :) See below for pixel bitmaps and fonts for Russian font ( atleast i hope that is bitmap). Russian is perfect example for our alphabet.

SpriteFont1.ru-RU.texture.png
SpriteFont1.ru-RU.yaml.png
SpriteFont1.ru-RU.texture.pngSpriteFont1.ru-RU.yaml.png
 
Last edited:

Jolesh

Greenhorn
Hej, I have a similar problem. I am translating Stardew to Esperanto. But all the Ĝ Ĥ Ŭ Ŝ Ĵ Ĉ letters are missing. I tried to load font files in my mod. But I don't even succeed with loading the Rusian font files in my mod. Otherwise I could probably adapt them for Esperanto.

I copied the Russian_0.png and Russian.fnt into ...Stardew Valley\Mods\StardewEsperanto\assets and added the following to my content.json, but Smapi still looks for a.xnb file in the GAME files:

All my (working) code: https://github.com/jolesh/StardewEsperanto

content.json:
JSON:
{
    "Format": "2.0.0",
    "Changes": [
        // define language
        {
            "Action": "EditData",
            "Target": "Data/AdditionalLanguages",
            "Entries": {
                "Jolesh.StardewValleyEsperanto": { // for technical reasons, you need to specify the ID here *and* in the "ID" field
                    "ID": "Jolesh.StardewValleyEsperanto",
                    "LanguageCode": "eo",
                    "ButtonTexture": "Mods/{{ModId}}/Button",
                    //"UseLatinFont": true,
                    "UseLatinFont": false,
                    "FontFile": "Fonts/{{ModId}}/Russian",
                    "FontPixelZoom": 1.5,
                    "TimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockTimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockDateFormat": "[DAY_OF_WEEK] [DAY_OF_MONTH]"
                }
            }
        },

        // load button texture in assets
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Button",
            "FromFile": "assets/button.png"
        },

        // load font files
        {
            "Action": "Load",
            "Target": "Fonts/{{ModId}}/Russian",
            "FromFile": "assets/Esperanto.fnt"
        },
        {
            "Action": "Load",
            "Target": "Fonts/{{ModId}}/Russian_0",
            "FromFile": "assets/Esperanto_0.png"
        },

error log:
Code:
[10:38:11 INFO  SMAPI] SMAPI 4.1.10 with Stardew Valley 1.6.15 build 24356 on Microsoft Windows 11 Pro
[10:38:11 INFO  SMAPI] Mods go here: C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Mods
[10:38:11 TRACE SMAPI] Log started at 2025-07-13T08:38:11 UTC
[10:38:17 DEBUG SMAPI] Waiting for game to launch...
[10:38:18 TRACE game] Instance_Initialize() finished, elapsed = '00:00:00.7262551'
[10:38:18 DEBUG SMAPI] Loading mod metadata...
[10:38:18 TRACE SMAPI]   Ignored loose files: StardewEsperanto.zip
[10:38:18 DEBUG SMAPI] Loading mods...
[10:38:18 TRACE SMAPI]    1. Forigitaj Tekstoj (from Mods\1. Forigitaj Tekstoj, ID: <unknown>)...
[10:38:18 TRACE SMAPI]       Failed: it contains files, but none of them are manifest.json.
[10:38:18 TRACE SMAPI]    Console Commands (from Mods\ConsoleCommands\ConsoleCommands.dll, ID: SMAPI.ConsoleCommands, assembly version: 4.1.10)...
[10:38:18 TRACE SMAPI]    Content Patcher (from Mods\ContentPatcher\ContentPatcher.dll, ID: Pathoschild.ContentPatcher, assembly version: 2.5.3)...
[10:38:19 TRACE SMAPI]    Save Backup (from Mods\SaveBackup\SaveBackup.dll, ID: SMAPI.SaveBackup, assembly version: 4.1.10)...
[10:38:19 TRACE SMAPI]       Detected direct console access (System.Console type) in assembly SaveBackup.dll.
[10:38:19 TRACE SMAPI]    StardewValley Esperanto (from Mods\StardewEsperanto, ID: Jolesh.StardewValleyEsperanto) [content pack]...
[10:38:19 INFO  SMAPI] Loaded 3 mods:
[10:38:19 INFO  SMAPI]    Console Commands 4.1.10 by SMAPI | Adds SMAPI console commands that let you manipulate the game.
[10:38:19 INFO  SMAPI]    Content Patcher 2.5.3 by Pathoschild | Loads content packs which edit game data, images, and maps without changing the game files.
[10:38:19 INFO  SMAPI]    Save Backup 4.1.10 by SMAPI | Automatically backs up all your saves once per day into its folder.

[10:38:19 INFO  SMAPI] Loaded 1 content packs:
[10:38:19 INFO  SMAPI]    StardewValley Esperanto 0.1.2 by Jolesh | for Content Patcher | A Esperento translation for Stardew Valley, Eperanta traduko por Stardew Valley

[10:38:19 ERROR SMAPI]    Skipped mods
[10:38:19 ERROR SMAPI]    --------------------------------------------------
[10:38:19 ERROR SMAPI]       These mods could not be added to your game.

[10:38:19 ERROR SMAPI]       - 1. Forigitaj Tekstoj because it contains files, but none of them are manifest.json.

[10:38:19 TRACE SMAPI]    Direct console access
[10:38:19 TRACE SMAPI]    --------------------------------------------------
[10:38:19 TRACE SMAPI]       These mods access the SMAPI console window directly. This is more fragile, and their output may not
[10:38:19 TRACE SMAPI]       be logged by SMAPI.

[10:38:19 TRACE SMAPI]       - Save Backup

[10:38:19 DEBUG SMAPI]    No update keys
[10:38:19 DEBUG SMAPI]    --------------------------------------------------
[10:38:19 DEBUG SMAPI]       These mods have no update keys in their manifest. SMAPI may not notify you about updates for these
[10:38:19 DEBUG SMAPI]       mods. Consider notifying the mod authors about this problem.

[10:38:19 DEBUG SMAPI]       - StardewValley Esperanto

[10:38:19 DEBUG SMAPI] Launching mods...
[10:38:19 TRACE SMAPI]    Found mod-provided API (ContentPatcher.Framework.ContentPatcherAPI).
[10:38:19 DEBUG SMAPI] Mods loaded and ready!
[10:38:19 TRACE Save Backup] Already backed up today.
[10:38:19 TRACE SMAPI] Checking for known software conflicts...
[10:38:19 TRACE SMAPI]    None found!
[10:38:19 TRACE SMAPI] Checking for updates...
[10:38:19 ALERT SMAPI] You can update SMAPI to 4.2.1: https://smapi.io
[10:38:19 TRACE SMAPI]    Checking for updates to 2 mods...
[10:38:19 TRACE game] setGameMode( 'titleScreenGameMode (0)' )

[10:38:19 ALERT SMAPI] You can update 1 mod:
[10:38:19 ALERT SMAPI]    Content Patcher 2.7.2: https://www.nexusmods.com/stardewvalley/mods/1915 (you have 2.5.3)
[10:38:19 TRACE SMAPI] Running on GPU: AMD Radeon(TM) Graphics
[10:38:19 TRACE game] Instance_LoadContent() finished, elapsed = '00:00:01.7565788'
[10:38:20 TRACE game] Steam logged on: True
[10:38:20 TRACE game] Initializing GalaxySDK
[10:38:20 TRACE game] Requesting Steam app ticket
[10:38:21 INFO  SMAPI] Type 'help' for help, or 'help <cmd>' for a command's usage
[10:38:21 TRACE game] Signing into GalaxySDK
[10:38:21 TRACE game] Registered trigger action handler 'Pathoschild.ContentPatcher_MigrateIds'.
[10:38:21 TRACE Content Patcher] Requested cache invalidation for all assets matching a predicate.
[10:38:21 TRACE SMAPI] Invalidated 0 cache entries.
[10:38:21 TRACE game] Galaxy auth success
[10:38:21 TRACE game] Galaxy signed in
[10:38:21 TRACE game] Galaxy logged on
[10:38:21 TRACE SMAPI] Content Patcher edited Data/AdditionalLanguages (for the 'StardewValley Esperanto' content pack).
[10:38:21 TRACE game] LocalizedContentManager.CurrentLanguageCode CHANGING from 'en' to 'mod'
[10:38:21 TRACE Content Patcher] Requested cache invalidation for all assets matching a predicate.
[10:38:21 TRACE game] Successfully loaded ContentHashes.json containing 3560 file(s);
[10:38:21 TRACE game] EnsureManifestInitialized() finished, elapsed = '00:00:00.0519844'
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Minigames/TitleButtons.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Minigames/TitleButtons.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Minigames/TitleButtons.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Data/Achievements.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Data/NPCGiftTastes.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Strings/StringsFromCSFiles.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE SMAPI] Invalidated 8 asset names (Data/Achievements, Data/Boots, Data/hats, Data/NPCGiftTastes, Minigames/TitleButtons, Strings/StringsFromCSFiles, Strings/Tools, Strings/Weapons).
Propagated 6 core assets (Data/Achievements, Data/Boots, Data/hats, Data/NPCGiftTastes, Minigames/TitleButtons, Strings/StringsFromCSFiles).
[10:38:22 TRACE SMAPI] Content Patcher loaded asset 'Strings/StringsFromCSFiles.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:22 TRACE game] LocalizedContentManager.CurrentLanguageCode CHANGED from 'en' to 'mod'
[10:38:22 TRACE SMAPI] Context: locale set to mod (eo).
[10:38:22 TRACE game] Window_ClientSizeChanged(); Window.ClientBounds={X:0 Y:0 Width:1920 Height:1080}
[10:38:22 TRACE game] Successfully set GOG Galaxy profile name.
[10:38:32 TRACE SMAPI] Content Patcher loaded asset 'Fonts/Jolesh.StardewValleyEsperanto/Russian' (for the 'StardewValley Esperanto' content pack).
[10:38:32 ERROR SMAPI] The StardewValley.Menus.TitleMenu menu crashed while drawing itself. SMAPI will force it to exit to avoid crashing the game.
Microsoft.Xna.Framework.Content.ContentLoadException: The content file was not found.
---> FileNotFoundException: Could not find file 'C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Content\Fonts\Esperanto_0.xnb'.
File name: 'C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Content\Fonts\Esperanto_0.xnb'
   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
   at Microsoft.Xna.Framework.TitleContainer.PlatformOpenStream(String safeName) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\Platform\TitleContainer.Desktop.cs:line 29
   at Microsoft.Xna.Framework.TitleContainer.OpenStream(String name) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\TitleContainer.cs:line 37
   at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\Content\ContentManager.cs:line 276
   --- End of inner exception stack trace ---
   at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\Content\ContentManager.cs:line 289
   at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\Content\ContentManager.cs:line 319
   at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\MonoGame.Desktop\MonoGame.Framework\Content\ContentManager.cs:line 255
   at StardewModdingAPI.Framework.ContentManagers.BaseContentManager.RawLoad[T](IAssetName assetName, Boolean useCache) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs:line 340
   at StardewModdingAPI.Framework.ContentManagers.GameContentManager.<>c__DisplayClass6_0`1.<LoadExact>b__0() in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/ContentManagers/GameContentManager.cs:line 127
   at StardewModdingAPI.Framework.Utilities.ContextHash`1.Track[TResult](T key, Func`1 action) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/Utilities/ContextHash.cs:line 53
   at StardewModdingAPI.Framework.ContentManagers.GameContentManager.LoadExact[T](IAssetName assetName, Boolean useCache)
   at StardewModdingAPI.Framework.ContentManagers.BaseContentManager.LoadLocalized[T](IAssetName assetName, LanguageCode language, Boolean useCache) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs:line 190
   at StardewModdingAPI.Framework.ContentManagers.BaseContentManager.Load[T](String assetName, LanguageCode language) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/ContentManagers/BaseContentManager.cs:line 137
   at StardewValley.BellsAndWhistles.SpriteText.LoadFontData(LanguageCode code) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\Farmer\Farmer\BellsAndWhistles\SpriteText.cs:line 832
   at StardewValley.BellsAndWhistles.SpriteText.drawString(SpriteBatch b, String s, Int32 x, Int32 y, Int32 characterPosition, Int32 width, Int32 height, Single alpha, Single layerDepth, Boolean junimoText, Int32 drawBGScroll, String placeHolderScrollWidthText, Nullable`1 color, ScrollTextAlignment scroll_text_alignment) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\Farmer\Farmer\BellsAndWhistles\SpriteText.cs:line 464
   at StardewValley.BellsAndWhistles.SpriteText.drawStringWithScrollBackground(SpriteBatch b, String s, Int32 x, Int32 y, String placeHolderWidthText, Single alpha, Nullable`1 color, ScrollTextAlignment scroll_text_alignment) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\Farmer\Farmer\BellsAndWhistles\SpriteText.cs:line 446
   at StardewValley.Menus.TitleMenu.draw(SpriteBatch b) in D:\GitlabRunner\builds\Gq5qA5P4\0\ConcernedApe\stardewvalley\Farmer\Farmer\Menus\TitleMenu.cs:line 2904
   at StardewModdingAPI.Framework.SModHooks.TryDrawMenu(IClickableMenu menu, Action draw_menu_action) in /home/pathoschild/git/SMAPI/src/SMAPI/Framework/SModHooks.cs:line 114
[10:38:32 TRACE SMAPI] Content Patcher loaded asset 'Minigames/TitleButtons.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:32 TRACE SMAPI] Content Patcher loaded asset 'Strings/StringsFromCSFiles.eo' (for the 'StardewValley Esperanto' content pack).
[10:38:32 TRACE game] Window_ClientSizeChanged(); Window.ClientBounds={X:0 Y:0 Width:1920 Height:1080}
 

Jolesh

Greenhorn
I removed the {{ModId}} and now it is kind of working.

content.json
JSON:
"Format": "2.0.0",
    "Changes": [
        // define language
        {
            "Action": "EditData",
            "Target": "Data/AdditionalLanguages",
            "Entries": {
                "Jolesh.StardewValleyEsperanto": { // for technical reasons, you need to specify the ID here *and* in the "ID" field
                    "ID": "Jolesh.StardewValleyEsperanto",
                    "LanguageCode": "eo",
                    "ButtonTexture": "Mods/{{ModId}}/Button",
                    //"UseLatinFont": true,
                    "UseLatinFont": false,
                    "FontFile": "Fonts/Esperanto",
                    "FontPixelZoom": 3.5,
                    "TimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockTimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockDateFormat": "[DAY_OF_WEEK] [DAY_OF_MONTH]"
                }
            }
        },

        // load button texture in assets
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Button",
            "FromFile": "assets/button.png"
        },

        // load font files
        {
            "Action": "Load",
            "Target": "Fonts/Esperanto",
            "FromFile": "assets/Esperanto.fnt"
        },
        {
            "Action": "Load",
            "Target": "Fonts/Esperanto_0",
            "FromFile": "assets/Esperanto_0.png"
        },
 

bagi576

Farmhand
Hey, hi
I removed the {{ModId}} and now it is kind of working.

content.json
JSON:
"Format": "2.0.0",
    "Changes": [
        // define language
        {
            "Action": "EditData",
            "Target": "Data/AdditionalLanguages",
            "Entries": {
                "Jolesh.StardewValleyEsperanto": { // for technical reasons, you need to specify the ID here *and* in the "ID" field
                    "ID": "Jolesh.StardewValleyEsperanto",
                    "LanguageCode": "eo",
                    "ButtonTexture": "Mods/{{ModId}}/Button",
                    //"UseLatinFont": true,
                    "UseLatinFont": false,
                    "FontFile": "Fonts/Esperanto",
                    "FontPixelZoom": 3.5,
                    "TimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockTimeFormat": "[HOURS_24_00]:[MINUTES]",
                    "ClockDateFormat": "[DAY_OF_WEEK] [DAY_OF_MONTH]"
                }
            }
        },

        // load button texture in assets
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Button",
            "FromFile": "assets/button.png"
        },

        // load font files
        {
            "Action": "Load",
            "Target": "Fonts/Esperanto",
            "FromFile": "assets/Esperanto.fnt"
        },
        {
            "Action": "Load",
            "Target": "Fonts/Esperanto_0",
            "FromFile": "assets/Esperanto_0.png"
        },

Hey, Hi :)

I'm going to try it when i got a time. I have a feeling that it is the solution for it :)
Sorry for late response and it will take a time for me to try out, but i'll definitely do as you did
 
Top