improved plural localization.

This commit is contained in:
morkt 2014-08-01 17:58:04 +04:00
parent 045988301b
commit d15addd44f
5 changed files with 45 additions and 51 deletions

View File

@ -208,26 +208,24 @@ namespace GARbro.GUI
extractProgressDialog.Description = file_list.First().Name; extractProgressDialog.Description = file_list.First().Name;
extractProgressDialog.ProgressBarStyle = ProgressBarStyle.MarqueeProgressBar; extractProgressDialog.ProgressBarStyle = ProgressBarStyle.MarqueeProgressBar;
} }
int extract_count = 0;
extractProgressDialog.DoWork += (s, e) => extractProgressDialog.DoWork += (s, e) =>
{ {
try try
{ {
int total = file_list.Count(); int total = file_list.Count();
int i = 0;
foreach (var entry in file_list) foreach (var entry in file_list)
{ {
if (extractProgressDialog.CancellationPending) if (extractProgressDialog.CancellationPending)
break; break;
if (total > 1) if (total > 1)
extractProgressDialog.ReportProgress (i*100/total, null, entry.Name); extractProgressDialog.ReportProgress (extract_count*100/total, null, entry.Name);
if (null != image_format && entry.Type == "image") if (null != image_format && entry.Type == "image")
ExtractImage (arc, entry, image_format); ExtractImage (arc, entry, image_format);
else else
arc.Extract (entry); arc.Extract (entry);
++i; ++extract_count;
} }
SetStatusText (string.Format (guiStrings.MsgExtractCompletePlural, i,
Localization.Plural (i, "file")));
} }
catch (Exception X) catch (Exception X)
{ {
@ -241,6 +239,7 @@ namespace GARbro.GUI
arc.Dispose(); arc.Dispose();
Dispatcher.Invoke (RefreshView); Dispatcher.Invoke (RefreshView);
} }
SetStatusText (Localization.Format ("MsgExtractedFiles", extract_count));
}; };
extractProgressDialog.ShowDialog (this); extractProgressDialog.ShowDialog (this);
} }

View File

@ -303,24 +303,6 @@ namespace GARbro.GUI.Strings {
} }
} }
/// <summary>
/// Looks up a localized string similar to file.
/// </summary>
public static string LPfile1 {
get {
return ResourceManager.GetString("LPfile1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to files.
/// </summary>
public static string LPfile2 {
get {
return ResourceManager.GetString("LPfile2", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to About Game Resource browser. /// Looks up a localized string similar to About Game Resource browser.
/// </summary> /// </summary>
@ -448,11 +430,20 @@ namespace GARbro.GUI.Strings {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Extracted {0} {1}. /// Looks up a localized string similar to Extracted {0} file.
/// </summary> /// </summary>
public static string MsgExtractCompletePlural { public static string MsgExtractedFiles1 {
get { get {
return ResourceManager.GetString("MsgExtractCompletePlural", resourceCulture); return ResourceManager.GetString("MsgExtractedFiles1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Extracted {0} files.
/// </summary>
public static string MsgExtractedFiles2 {
get {
return ResourceManager.GetString("MsgExtractedFiles2", resourceCulture);
} }
} }

View File

@ -198,12 +198,6 @@
<data name="LabelExtractFileTo" xml:space="preserve"> <data name="LabelExtractFileTo" xml:space="preserve">
<value>Extract {0} to</value> <value>Extract {0} to</value>
</data> </data>
<data name="LPfile1" xml:space="preserve">
<value>file</value>
</data>
<data name="LPfile2" xml:space="preserve">
<value>files</value>
</data>
<data name="MenuAbout" xml:space="preserve"> <data name="MenuAbout" xml:space="preserve">
<value>About Game Resource browser</value> <value>About Game Resource browser</value>
</data> </data>
@ -225,8 +219,8 @@
<data name="MsgExtractComplete" xml:space="preserve"> <data name="MsgExtractComplete" xml:space="preserve">
<value>Extracted {0} into {1}</value> <value>Extracted {0} into {1}</value>
</data> </data>
<data name="MsgExtractCompletePlural" xml:space="preserve"> <data name="MsgExtractedFiles1" xml:space="preserve">
<value>Extracted {0} {1}</value> <value>Extracted {0} file</value>
</data> </data>
<data name="MsgExtractingArchive" xml:space="preserve"> <data name="MsgExtractingArchive" xml:space="preserve">
<value>Extracting files from {0}</value> <value>Extracting files from {0}</value>
@ -348,4 +342,7 @@ Overwrite?</value>
<data name="MenuHelp" xml:space="preserve"> <data name="MenuHelp" xml:space="preserve">
<value>_Help</value> <value>_Help</value>
</data> </data>
<data name="MsgExtractedFiles2" xml:space="preserve">
<value>Extracted {0} files</value>
</data>
</root> </root>

View File

@ -195,15 +195,6 @@
<data name="LabelExtractFileTo" xml:space="preserve"> <data name="LabelExtractFileTo" xml:space="preserve">
<value>Извлечь {0} в</value> <value>Извлечь {0} в</value>
</data> </data>
<data name="LPfile1" xml:space="preserve">
<value>файл</value>
</data>
<data name="LPfile2" xml:space="preserve">
<value>файла</value>
</data>
<data name="LPfile3" xml:space="preserve">
<value>файлов</value>
</data>
<data name="MenuAbout" xml:space="preserve"> <data name="MenuAbout" xml:space="preserve">
<value>О программе</value> <value>О программе</value>
</data> </data>
@ -225,9 +216,6 @@
<data name="MsgExtractComplete" xml:space="preserve"> <data name="MsgExtractComplete" xml:space="preserve">
<value>{0} извлечён в {1}</value> <value>{0} извлечён в {1}</value>
</data> </data>
<data name="MsgExtractCompletePlural" xml:space="preserve">
<value>Извлечено {0} {1}</value>
</data>
<data name="MsgExtractingArchive" xml:space="preserve"> <data name="MsgExtractingArchive" xml:space="preserve">
<value>Извлекаются файлы из {0}</value> <value>Извлекаются файлы из {0}</value>
</data> </data>
@ -360,4 +348,13 @@
<data name="MenuHelp" xml:space="preserve"> <data name="MenuHelp" xml:space="preserve">
<value>_Справка</value> <value>_Справка</value>
</data> </data>
<data name="MsgExtractedFiles1" xml:space="preserve">
<value>Извлечён {0} файл</value>
</data>
<data name="MsgExtractedFiles2" xml:space="preserve">
<value>Извлечено {0} файла</value>
</data>
<data name="MsgExtractedFiles3" xml:space="preserve">
<value>Извлечено {0} файлов</value>
</data>
</root> </root>

View File

@ -109,7 +109,7 @@ namespace GARbro.GUI
public static class Localization public static class Localization
{ {
public static string Plural (int n, string en_singular) public static string Plural (int n, string msg_id)
{ {
string suffix; string suffix;
if (CultureInfo.CurrentUICulture.Name == "ru-RU") if (CultureInfo.CurrentUICulture.Name == "ru-RU")
@ -122,15 +122,25 @@ namespace GARbro.GUI
} }
try try
{ {
var res = guiStrings.ResourceManager.GetString ("LP"+en_singular+suffix); var res = guiStrings.ResourceManager.GetString (msg_id+suffix);
return res ?? en_singular; if (null == res && suffix != "1")
res = guiStrings.ResourceManager.GetString (msg_id+"1");
if (null == res)
Trace.WriteLine (string.Format ("Missing string resource for '{0}' token", msg_id+suffix));
return res ?? msg_id;
} }
catch catch (Exception X)
{ {
return en_singular; Trace.WriteLine (X.Message, "Localization.Plural");
return msg_id;
} }
} }
public static string Format (string msg_id, int n)
{
return string.Format (Plural (n, msg_id), n);
}
// Localization.Format ("{0:file:files} copied", count); // Localization.Format ("{0:file:files} copied", count);
// public static string Format (string format, params object[] args); // public static string Format (string format, params object[] args);
} }