Where can I delete old localization entires?

I used localization tool on my project, using “leet” for main native language and RU and EN as translated cultures, gathered all and got table of translations.
After this I changed all entries in UMG widgets to more generic texts. Old words mentioned anywhere as I see. But now I going to Localization dashboard and I see old texts! I just deleted old localization directory and it does not gives result.
What can I do to delete old localization keys? Where stored this localization data? Or there more easy tool to delete it?

Hey, I’m having a little trouble understanding the question, so could I just clarify what you’re saying…

Are you saying that you gathered and translated text, before changing the source text to something else, but now you’re not seeing the new source text in the translation editor? If so, did you run another gather after changing the text?

I changed text in widgets and ran another gather, but it gives no result: old keys not cleared, but new keys created. Allegedly I not changed old text and created new one.

I tested this myself using the latest code and it seemed to work okay.

What I suspect is happening (I’m assuming you’re using 4.10) is that the cache of texts in the package header has ended up in a bad state (there used to be several bugs in this prior to 4.11), and that it still thinks the old text is being used, so those old texts are still ending up in your manifest file.

If you’re building from source then we can verify this easily enough with a small code change. If you open up GatherTextFromAssetsCommandlet.cpp and search for PackageFileSummary.GetFileVersionUE4() >= VER_UE4_SERIALIZE_TEXT_IN_PACKAGES then you’ll see the code that’s trying to use the cached package data. What you’ll want to do is comment out that if block so that we ignore the cache from the package and always load up the package and gather from it fresh. The end result should look something like this:

/*
// Package has gatherable text data in its header, process immediately.
if (PackageFileSummary.GetFileVersionUE4() >= VER_UE4_SERIALIZE_TEXT_IN_PACKAGES)
{
	TArray<FGatherableTextData> GatherableTextDataArray;

	if (PackageFileSummary.GatherableTextDataOffset > 0)
	{
		FileReader->Seek(PackageFileSummary.GatherableTextDataOffset);

		for(int32 i = 0; i < PackageFileSummary.GatherableTextDataCount; ++i)
		{
			FGatherableTextData* GatherableTextData = new(GatherableTextDataArray) FGatherableTextData;
			(*FileReader) << *GatherableTextData;
		}

		ProcessGatherableTextDataArray(PackageFile, GatherableTextDataArray);
	}
}
// Package not resaved since gatherable text data was added to package headers, defer processing until after loading.
else */if (PackageFileSummary.PackageFlags & PKG_RequiresLocalizationGather || PackageFileSummary.GetFileVersionUE4() < VER_UE4_PACKAGE_REQUIRES_LOCALIZATION_GATHER_FLAGGING)
{
	PackageFileNamesToLoad.Add(PackageFile);
}

If you’re not building from source (or can’t make this code change), then you might want to try re-saving all of your UMG assets again (one of the bugs was that we were including transient data in the cache, which meant that a UMG asset would also gather the text from any UMG asset widgets nested within it, causing issues when the inner UMG asset was changed without re-saving the outer UMG asset).

If that still doesn’t work then you can take a look at your manifest file and check to see if the old text is present in there, and if so, it’ll tell you which asset it thinks it’s being used in.

On my workplace I using 4.9 now, but gonna to update to 11.
Much thank you, Jamie for your detailed answers!
I will test it around with these days :slight_smile: