I’ve tested the project you sent me and I’ve managed to find the issue. The good news is that it was already fixed by the changes made for 4.12, and the fix for 4.11 is small (also shelved in CL# 3101518).
In FAsyncPackage::CreateLinker
, the following:
FString PackageFileName;
if (Desc.NameToLoad == NAME_None ||
(!GetConvertedDynamicPackageNameToTypeName().Contains(Desc.Name) &&
!FPackageName::DoesPackageExist(Desc.NameToLoad.ToString(), Desc.Guid.IsValid() ? &Desc.Guid : nullptr, &PackageFileName)))
{
UE_LOG(LogStreaming, Error, TEXT("Couldn't find file for package %s requested by async loading code."), *Desc.Name.ToString());
bLoadHasFailed = true;
return EAsyncPackageState::TimeOut;
}
Needs to be replaced with this:
FString NativePackageFileName;
FString LocalizedPackageFileName;
if (Desc.NameToLoad == NAME_None ||
(!GetConvertedDynamicPackageNameToTypeName().Contains(Desc.Name) &&
!FPackageName::DoesPackageExistWithLocalization(Desc.NameToLoad.ToString(), Desc.Guid.IsValid() ? &Desc.Guid : nullptr, &NativePackageFileName, &LocalizedPackageFileName)))
{
UE_LOG(LogStreaming, Error, TEXT("Couldn't find file for package %s requested by async loading code."), *Desc.Name.ToString());
bLoadHasFailed = true;
return EAsyncPackageState::TimeOut;
}
// If we are the editor, we must have a native package. If we are the game, we must have a localized package or a native package.
FString PackageFileName;
if (GIsEditor)
{
PackageFileName = NativePackageFileName;
}
else
{
PackageFileName = (LocalizedPackageFileName.Len() > 0) ? LocalizedPackageFileName : NativePackageFileName;
}
Based on this, and the lack of Content Browser integration, it seems that the released version of 4.11 didn’t quite have full localized package support. I don’t know whether you’re planning to upgrade past 4.11, but I’d recommend at least 4.12 for fully functional localized package support, as although the above fix will solve your redirection issue, it doesn’t do anything to solve the other culture hierarchy issues I mentioned before.
As an aside, the GetLocalizedSound function in your LocalizedAudio blueprint is quite odd. I appreciate it may have just been you testing, but you shouldn’t need to branch on a culture like that; you’d just use a fixed asset name and then use package localization to handle the redirection.