Uploading translated csv localization tables fails to upload and apply patch

Reproduction Steps

Uploading localized csv contents fails with “Upload cloud table failed” shown both in the UI and the output window. It appears partial uploading occurred.

This happens in multiple places. The file I tried to upload is included below (could not attach).

This file below is created via right click > save as csv in studio on a localization table.

Key,Context,Example,Source,en,qlp-pls
currency.default.format,,,${amount:int},${amount:int},${amount:int}
currency.addNumber,,,+{value},+{value},+{value}
actions.holding.unknown,,,???,???,???
items.unknown,,,???,???,???
items.paintball.ar,,,AR,AR,ÂR
keybinds.inventory.add,,,Add to inventory,Add to inventory,Âδδ ƭô ïñƲèñƭôř¥
keybinds.dialog.advance,,,Advance dialog,Advance dialog,ÂδƲáñçè δïáℓôϱ
settings.camera.aimWithGyroscope,,,Aim with gyroscope,Aim with gyroscope,Âï₥ ωïƭλ ϱ¥řôƨçôƥè
items.paintball.legacy,,,Alpha Tester Gun,Alpha Tester Gun,Âℓƥλá Tèƨƭèř Gúñ
loadouts.assault,,,Assault,Assault,Âƨƨáúℓƭ
items.currency.bag,,,Bag of {amount},Bag of {amount},ßáϱ ôƒ {amount}
items.containers.barrel,,,Barrel,Barrel,ßářřèℓ
items.paintball.basic,,,Basic,Basic,ßáƨïç
keybinds.aimlock.toggle,,,Camera lock,Camera lock,Çá₥èřá ℓôçƙ
actions.cancel,,,Cancel,Cancel,Çáñçèℓ
keybinds.paintball.cancel,,,Cancel,Cancel,Çáñçèℓ
keybinds.shared.cancel,,,Cancel,Cancel,Çáñçèℓ
slider.change,,,Change.,Change.,Çλáñϱè.
inventory.short.close,,,Close,Close,Çℓôƨè
settings.close,,,Close,Close,Çℓôƨè
inventory.close,,,Close inventory,Close inventory,Çℓôƨè ïñƲèñƭôř¥
settings.button.tooltip.close,,,Close options,Close options,Çℓôƨè ôƥƭïôñƨ
actions.currencyBag.combine,,,Combine,Combine,Çô₥βïñè
textbox.button.confirm,,,Confirm,Confirm,Çôñƒïř₥
keybinds.dialog.confirm,,,Confirm dialog input,Confirm dialog input,Çôñƒïř₥ δïáℓôϱ ïñƥúƭ
slider.confirm,,,Confirm.,Confirm.,Çôñƒïř₥.
actions.dash,,,Dash,Dash,Ðáƨλ
keybinds.paintball.dash,,,Dash,Dash,Ðáƨλ
items.paintball.doubleShotgun,,,Dbl Shotgun,Dbl Shotgun,Ðβℓ §λôƭϱúñ
actions.deploy,,,Deploy,Deploy,Ðèƥℓô¥
keybinds.paintball.deploy,,,Deploy,Deploy,Ðèƥℓô¥
currency.diamonds.name,,,Diamonds,Diamonds,Ðïá₥ôñδƨ
actions.holding.drop,,,Drop,Drop,Ðřôƥ
actions.fire,,,Fire,Fire,Fïřè
keybinds.paintball.fire,,,Fire,Fire,Fïřè
settings.inputTypes.gamepad,,,Gamepad,Gamepad,Gá₥èƥáδ
items.currency.goldBar,,,Gold Bar,Gold Bar,Gôℓδ ßář
loadouts.gunner,,,Gunner,Gunner,Gúññèř
actions.inventory.holdFromInventory,,,Hold,Hold,Hôℓδ
trigger.defaultText,,,Interact,Interact,Ìñƭèřáçƭ
keybinds.shared.primary,,,Interact (Primary),Interact (Primary),Ìñƭèřáçƭ (Þřï₥ář¥)
keybinds.shared.secondary,,,Interact (Secondary),Interact (Secondary),Ìñƭèřáçƭ (§èçôñδář¥)
inventory.inventory,,,Inventory,Inventory,ÌñƲèñƭôř¥
pictureInPicture.title,,,KO {username}!,KO {username}!,KÓ {username}!
settings.inputTypes.keyboard,,,Keyboard,Keyboard,Kè¥βôářδ
keybinds.paintball.leaderboard,,,Leaderboard,Leaderboard,£èáδèřβôářδ
unlockGrid.level,,,Level {level:int},Level {level:int},£èƲèℓ {level:int}
items.paintball.upgrades.rebirth,,,Level {level},Level {level},£èƲèℓ {level}
unlockGrid.title,,,Loadout on next respawn,Loadout on next respawn,£ôáδôúƭ ôñ ñèжƭ řèƨƥáωñ
actions.aimLock.start,,,Lock Camera,Lock Camera,£ôçƙ Çá₥èřá
unlockGrid.maxLevel,,,Max Level {level:int},Max Level {level:int},Máж £èƲèℓ {level:int}
settings.paintball.mobileAutomaticFire,,,Mobile controls auto fire,Mobile controls auto fire,Môβïℓè çôñƭřôℓƨ áúƭô ƒïřè
currency.default.name,,,Money,Money,Môñè¥
actions.tossing.aimCamera,,,Move camera,Move camera,MôƲè çá₥èřá
inventory.short.open,,,Open,Open,Óƥèñ
inventory.open,,,Open inventory,Open inventory,Óƥèñ ïñƲèñƭôř¥
settings.button.tooltip.open,,,Options,Options,Óƥƭïôñƨ
settings.title,,,Options,Options,Óƥƭïôñƨ
items.paintball.paintballGun,,,Paintball Gun,Paintball Gun,Þáïñƭβáℓℓ Gúñ
actions.holding.pickup,,,Pickup,Pickup,Þïçƙúƥ
items.paintball.pistol,,,Pistol,Pistol,Þïƨƭôℓ
actions.place,,,Place,Place,Þℓáçè
keybinds.paintball.place,,,Place,Place,Þℓáçè
shutdown.restart.subtitle,,,Please wait...,Please wait...,Þℓèáƨè ωáïƭ...
actions.currencyBag.putInWallet,,,Put in wallet,Put in wallet,Þúƭ ïñ ωáℓℓèƭ
items.paintball.railgun,,,Railgun,Railgun,Ráïℓϱúñ
shutdown.complete.title,,,Rebooting servers for update.,Rebooting servers for update.,Rèβôôƭïñϱ ƨèřƲèřƨ ƒôř úƥδáƭè.
shutdown.lobby.title,,,Rebooting servers for update.,Rebooting servers for update.,Rèβôôƭïñϱ ƨèřƲèřƨ ƒôř úƥδáƭè.
shutdown.restart.title,,,Rebooting servers for update.,Rebooting servers for update.,Rèβôôƭïñϱ ƨèřƲèřƨ ƒôř úƥδáƭè.
actions.tossing.release,,,Release,Release,Rèℓèáƨè
keybinds.paintball.reload,,,Reload,Reload,Rèℓôáδ
settings.restoreDefaults,,,Reset all,Reset all,Rèƨèƭ áℓℓ
keybinds.settings.restoreDefaults,,,Restore defaults,Restore defaults,Rèƨƭôřè δèƒáúℓƭƨ
items.paintball.revolver,,,Revolver,Revolver,RèƲôℓƲèř
items.paintball.rifle,,,Rifle,Rifle,Rïƒℓè
currency.robux.name,,,Robux,Robux,Rôβúж
leaderboard.title,,,SCOREBOARD,SCOREBOARD,§ÇÓRÉßÓÂRÐ
items.paintball.smg,,,SMG,SMG,§MG
keybinds.dialog.selectTextBox,,,Select dialog textbox,Select dialog textbox,§èℓèçƭ δïáℓôϱ ƭèжƭβôж
items.paintball.shotgun,,,Shotgun,Shotgun,§λôƭϱúñ
loadouts.shotgun,,,Shotgun,Shotgun,§λôƭϱúñ
items.paintball.sniper,,,Sniper,Sniper,§ñïƥèř
loadouts.sniper,,,Sniper,Sniper,§ñïƥèř
actions.stop,,,Stop,Stop,§ƭôƥ
actions.tossing.stopThrowing,,,Stop throwing,Stop throwing,§ƭôƥ ƭλřôωïñϱ
actions.inventory.storeInInventory,,,Store,Store,§ƭôřè
themeswitcher.dark,,,Switch to dark theme,Switch to dark theme,§ωïƭçλ ƭô δářƙ ƭλè₥è
themeswitcher.light,,,Switch to light theme,Switch to light theme,§ωïƭçλ ƭô ℓïϱλƭ ƭλè₥è
shutdown.lobby.subtitle,,,Teleporting back in a moment...,Teleporting back in a moment...,Tèℓèƥôřƭïñϱ βáçƙ ïñ á ₥ô₥èñƭ...
actions.tossing.throw,,,Throw,Throw,Tλřôω
keybinds.tossing.throw,,,Throw held item,Throw held item,Tλřôω λèℓδ ïƭè₥
keybinds.tossing.release,,,Throw release,Throw release,Tλřôω řèℓèáƨè
keybinds.inventory.toggle,,,Toggle inventory,Toggle inventory,Tôϱϱℓè ïñƲèñƭôř¥
actions.tossing.tossTo,,,Toss to,Toss to,Tôƨƨ ƭô
settings.inputTypes.touch,,,Touch,Touch,Tôúçλ
actions.aimLock.stop,,,Unlock Camera,Unlock Camera,Ûñℓôçƙ Çá₥èřá
shutdown.complete.subtitle,,,Update complete...,Update complete...,Ûƥδáƭè çô₥ƥℓèƭè...
menu.button,,,Upgrade,Upgrade,Ûƥϱřáδè
mapselector.title,,,Vote for the next map!,Vote for the next map!,Vôƭè ƒôř ƭλè ñèжƭ ₥áƥ!
textbox.defaultPrompt,,,What do you say?,What do you say?,Wλáƭ δô ¥ôú ƨá¥?
killcard.title,,,Wiped out by...,Wiped out by...,Wïƥèδ ôúƭ β¥...
currency.experience.name,,,XP,XP,XÞ
settings.tabs.controls,,,controls,controls,çôñƭřôℓƨ
settings.tabs.gameplay,,,gameplay,gameplay,ϱá₥èƥℓá¥
levelbar.maxedOutLevel,,,max level,max level,₥áж ℓèƲèℓ
unlockGrid.multiplier,,,x{multiplier} KOs,x{multiplier} KOs,ж{multiplier} KÓƨ
currency.formatNumber,,,{amount:int},{amount:int},{amount:int}
currency.diamonds.format,,,{amount:int} Diamonds,{amount:int} Diamonds,{amount:int} Ðïá₥ôñδƨ
currency.robux.format,,,{amount:int} Robux,{amount:int} Robux,{amount:int} Rôβúж
currency.experience.format,,,{amount:int} XP,{amount:int} XP,{amount:int} XÞ
textbox.characterLimit,,,{chars:int}/{maxChars:int},{chars:int}/{maxChars:int},{chars:int}/{maxChars:int}
levelbar.barText,,,{earned:int}/{required:int} XP,{earned:int}/{required:int} XP,{earned:int}/{required:int} XÞ
items.paintball.upgrades.unknown,,,{level}/{maxLevel} ???,{level}/{maxLevel} ???,{level}/{maxLevel} ???
items.paintball.upgrades.accuracy,,,{level}/{maxLevel} Accuracy,{level}/{maxLevel} Accuracy,{level}/{maxLevel} Âççúřáç¥
items.paintball.upgrades.cashMultiplier,,,{level}/{maxLevel} Cash,{level}/{maxLevel} Cash,{level}/{maxLevel} Çáƨλ
items.paintball.upgrades.firerate,,,{level}/{maxLevel} Fire Rate,{level}/{maxLevel} Fire Rate,{level}/{maxLevel} Fïřè Ráƭè
items.paintball.upgrades.jumpHeight,,,{level}/{maxLevel} Jump,{level}/{maxLevel} Jump,{level}/{maxLevel} Jú₥ƥ
items.paintball.upgrades.shots,,,{level}/{maxLevel} Shots,{level}/{maxLevel} Shots,{level}/{maxLevel} §λôƭƨ
items.paintball.upgrades.walkSpeed,,,{level}/{maxLevel} Walkspeed,{level}/{maxLevel} Walkspeed,{level}/{maxLevel} Wáℓƙƨƥèèδ
items.humanoid.named,,,{name},{name},{name}
inventory.pockets,,,{player}'s Pocket,{player}'s Pocket,{player}'ƨ Þôçƙèƭ
unlockGrid.upgrades,,,{upgrades:int}/{maxUpgrades:int} Upgrades,{upgrades:int}/{maxUpgrades:int} Upgrades,{upgrades:int}/{maxUpgrades:int} Ûƥϱřáδèƨ

This is not great!

Expected Behavior

I expect the upload to complete so I can localize my game.

Actual Behavior

The localization fails to upload, although apparently part of it did upload. This occurs in both the test place, and the current place.

The output we see is this:

  Localization Tools failed to upload cloud table.

Repeatedly trying it results in the same level of failure, which is very frustrating.

Workaround

No work around, besides manually writing in entries, which I’m unwilling to do.

Issue Area: Studio
Issue Type: Other
Impact: High
Frequency: Constantly
Date First Experienced: 2022-07-12 00:07:00 (-07:00)

5 Likes

i had this issue, make sure you dont have any duplicate keys or reference words. they told me months ago they would make the errors more descriptive but obviously this did not happen.

1 Like

Hello,

There are several locations in your csv file where you have the same source duplicated across multiple entries (e.g. “Cancel” is duplicated across the entries with keys “actions.cancel”, “keybinds.paintball.cancel”, “keybinds.shared.cancel”.)

Source/context pairs need to be unique per entry. If you’d like to add further differentiation between entries with the same source but different keys, you should fill in the context field in your entries. Hope this helps!

4 Likes

Thanks, I meant to follow up and post that but yeah, I fixed this in my generative framework a few days ago!

Thank you for the follow up!

Note a better error message here would be great!

1 Like