Skip to content

Commit 6ecac4e

Browse files
committed
Fix medium priority logic bugs across all backends
- Android: Fix array index default to sort malformed entries last (int.MaxValue) - XLIFF: Fix namespace detection to use exact comparison instead of Contains - XLIFF: Change version default from '1.2' to 'unknown' for invalid files - XLIFF: Preserve SourcePluralText in CreatePluralGroup12 - All backends: Implement deterministic plural fallback priority (other → one → first → empty) Affects: Po, Json, Android, iOS, XLIFF (ParsePluralGroup12 and ParsePluralGroup20)
1 parent df36447 commit 6ecac4e

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

LocalizationManager.Core/Backends/Android/AndroidResourceWriter.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,21 @@ public void Write(ResourceFile file)
5454
OmitXmlDeclaration = false
5555
};
5656

57-
using var writer = XmlWriter.Create(file.Language.FilePath, settings);
58-
doc.Save(writer);
57+
// Use atomic write to prevent file corruption
58+
var tempPath = file.Language.FilePath + $".tmp.{Guid.NewGuid()}";
59+
try
60+
{
61+
using (var writer = XmlWriter.Create(tempPath, settings))
62+
{
63+
doc.Save(writer);
64+
}
65+
File.Move(tempPath, file.Language.FilePath, overwrite: true);
66+
}
67+
finally
68+
{
69+
if (File.Exists(tempPath))
70+
File.Delete(tempPath);
71+
}
5972
}
6073

6174
/// <summary>
@@ -295,7 +308,7 @@ private static int ExtractArrayIndex(string key)
295308
var match = ArrayKeyPattern().Match(key);
296309
if (match.Success && int.TryParse(match.Groups[2].Value, out var index))
297310
return index;
298-
return 0;
311+
return int.MaxValue; // Sort malformed entries last
299312
}
300313

301314
/// <summary>

0 commit comments

Comments
 (0)