We have a setup where we successfully exported CSVs using the CSV extension and sent them to our localization team.
Now, importing the translated CSVs only seems to bring up the translated keys at the top of the list, but their translations do not appear.
This happens when using the Localization Tables window’s “Import” dropdown button, then choosing “Import>CSV” or “Import>CSV(Merge)”. The same happens when using the string table’s vertical ellipsis menu (⋮) menu, then “Import>CSV” or “Import>CSV(Merge)”.
However, importing from the LocalizationSettings’s “Open” button works, but it clears and replaces our entire string tables, which is not viable for our workflow.
Localization package v.1.5.2 (Latest available from package manager)
Unity 2020.3.48f1 LTS
The log displays no warning or errors, only this profiling message:
Importing C:/Users/lazlo/Desktop/EteFrenchLocSource/StringTable_Props.csv
: 0.02s
Mapping Headers: 0s
Reading Contents: 0.01s
Removed missing entries:
: 1.88s
Total time: 1.91s
Finished Importing
UnityEditor.GenericMenu:CatchMenu (object,string[],int)
Here is a sample of our one of our CSV files. To test for the following screenshots, I kept only the very first line:
Key,Id,Speakers,EN,FR-QC,FR-IN
Prop/Acorn,155148364518682624,,Acorn,Gland,
Here is our setup in the LocalizationSettings:
Here is our setup in the StringTableCollection:
Here is the post-import diff for StringTable Shared Data. For reasons I don’t understand, it inserts the translated item at the top and offsets all the indices afterwards:
Here is the post-import diff for the relevant translated StringTable_fr-qc which should show “Gland” under “m_Localized”, but is actually empty:
Here is the code for our custom “Speakers” column CSV column:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using CsvHelper;
using Sirenix.OdinInspector;
using UnityEditor.Localization;
using UnityEditor.Localization.Plugins.CSV.Columns;
using UnityEngine;
using UnityEngine.Localization.Tables;
namespace Impossible.Ete
{
public sealed class MomentLineSpeakersCsvColumn : CsvColumns
{
[SerializeField]
private string _fieldName = "Speakers";
public string fieldName => _fieldName;
private SharedTableData sharedTableData;
private int fieldIndex;
public override void ReadBegin(StringTableCollection collection, CsvReader reader)
{
sharedTableData = collection.SharedData;
fieldIndex = reader.GetFieldIndex(fieldName, isTryGet: true);
}
public override void ReadRow(SharedTableData.SharedTableEntry keyEntry, CsvReader reader)
{
if (sharedTableData == null)
{
return;
}
var entry = sharedTableData.GetEntry(keyEntry.Id);
if (entry == null)
{
return;
}
var metadata = entry.Metadata.GetMetadata<MomentLineSpeakersMetadata>();
if (metadata == null)
{
metadata = new MomentLineSpeakersMetadata();
entry.Metadata.AddMetadata(metadata);
}
if (fieldIndex != -1)
{
metadata.speakers = reader.GetField(fieldIndex);
}
}
public override void WriteBegin(StringTableCollection collection, CsvWriter writer)
{
writer.WriteField(fieldName);
}
public override void WriteRow(SharedTableData.SharedTableEntry keyEntry, IList<StringTableEntry> tableEntries, CsvWriter writer)
{
var metadata = keyEntry.Metadata.GetMetadata<MomentLineSpeakersMetadata>();
if (metadata != null)
{
writer.WriteField(metadata.speakers, shouldQuote: true);
}
else
{
writer.WriteField(string.Empty);
}
}
}
}
Things I tried but didn’t work:
- Removing the custom Speakers column from the settings window and reimporting
- Reimporting the StringTable assets from the Project window context menu
- Restarting Unity
- Removing the hyphen in the locale header key (e.g. FR-QC => FRQC)
What am I missing?



