[banshee] Fixed smart playlist templates in non-English locales (bgo#581987)
- From: Alexander Kojevnikov <alexk src gnome org>
- To: svn-commits-list gnome org
- Subject: [banshee] Fixed smart playlist templates in non-English locales (bgo#581987)
- Date: Mon, 11 May 2009 18:48:33 -0400 (EDT)
commit 02ab975b5abe4f0038f89058e91fd000783f7cc2
Author: Alexander Kojevnikov <alexander kojevnikov com>
Date: Tue May 12 08:40:50 2009 +1000
Fixed smart playlist templates in non-English locales (bgo#581987)
When parsing predefined smart playlists that include time spans, banshee first
translated them which made them unparsable. This commit tries to parse both the
original and the translated version. The side-effect is that user queries can
now include both the English and the localised versions of time span terms.
---
.../Hyena.Query/RelativeTimeSpanQueryValue.cs | 7 ++-
.../Hyena/Hyena.Query/TimeSpanQueryValue.cs | 50 ++++++++++++++------
src/Libraries/Hyena/Hyena/StringUtil.cs | 11 ++--
3 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
index 3095744..772ef48 100644
--- a/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
@@ -83,10 +83,11 @@ namespace Hyena.Query
return DateTimeUtil.FromDateTime (DateTime.Now + TimeSpan.FromSeconds ((double) offset)).ToString (System.Globalization.CultureInfo.InvariantCulture);
}
- protected override string FactorString (TimeFactor factor, double count)
+ protected override string FactorString (TimeFactor factor, double count, bool translate)
{
- string translated = base.FactorString (factor, count);
- return (translated == null) ? null : String.Format (Catalog.GetString ("{0} ago"), translated);
+ string result = base.FactorString (factor, count, translate);
+ return (result == null) ? null : String.Format (
+ translate ? Catalog.GetString ("{0} ago") : "{0} ago", result);
}
}
}
diff --git a/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs b/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs
index 51f22cd..3e3d52d 100644
--- a/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs
+++ b/src/Libraries/Hyena/Hyena.Query/TimeSpanQueryValue.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Xml;
using System.Text;
using System.Text.RegularExpressions;
@@ -92,9 +93,14 @@ namespace Hyena.Query
{
Match match = number_regex.Match (input);
if (match != Match.Empty && match.Groups.Count > 0) {
- double val = Convert.ToDouble (match.Groups[0].Captures[0].Value);
+ double val;
+ try {
+ val = Convert.ToDouble (match.Groups[0].Captures[0].Value);
+ } catch (FormatException) {
+ val = Convert.ToDouble (match.Groups[0].Captures[0].Value, NumberFormatInfo.InvariantInfo);
+ }
foreach (TimeFactor factor in Enum.GetValues (typeof(TimeFactor))) {
- if (input == FactorString (factor, val)) {
+ if (input == FactorString (factor, val, true) || input == FactorString (factor, val, false)) {
SetUserRelativeValue (val, factor);
return;
}
@@ -105,7 +111,7 @@ namespace Hyena.Query
public override string ToUserQuery ()
{
- return FactorString (factor, FactoredValue);
+ return FactorString (factor, FactoredValue, true);
}
public virtual void SetUserRelativeValue (double offset, TimeFactor factor)
@@ -163,22 +169,36 @@ namespace Hyena.Query
return Convert.ToString (offset * 1000, System.Globalization.CultureInfo.InvariantCulture);
}
- protected virtual string FactorString (TimeFactor factor, double count)
+ protected virtual string FactorString (TimeFactor factor, double count, bool translate)
{
- string translated = null;
+ string result = null;
int plural_count = StringUtil.DoubleToPluralInt (count);
- switch (factor) {
- case TimeFactor.Second: translated = Catalog.GetPluralString ("{0} second", "{0} seconds", plural_count); break;
- case TimeFactor.Minute: translated = Catalog.GetPluralString ("{0} minute", "{0} minutes", plural_count); break;
- case TimeFactor.Hour: translated = Catalog.GetPluralString ("{0} hour", "{0} hours", plural_count); break;
- case TimeFactor.Day: translated = Catalog.GetPluralString ("{0} day", "{0} days", plural_count); break;
- case TimeFactor.Week: translated = Catalog.GetPluralString ("{0} week", "{0} weeks", plural_count); break;
- case TimeFactor.Month: translated = Catalog.GetPluralString ("{0} month", "{0} months", plural_count); break;
- case TimeFactor.Year: translated = Catalog.GetPluralString ("{0} year", "{0} years", plural_count); break;
- default: return null;
+ if (translate) {
+ switch (factor) {
+ case TimeFactor.Second: result = Catalog.GetPluralString ("{0} second", "{0} seconds", plural_count); break;
+ case TimeFactor.Minute: result = Catalog.GetPluralString ("{0} minute", "{0} minutes", plural_count); break;
+ case TimeFactor.Hour: result = Catalog.GetPluralString ("{0} hour", "{0} hours", plural_count); break;
+ case TimeFactor.Day: result = Catalog.GetPluralString ("{0} day", "{0} days", plural_count); break;
+ case TimeFactor.Week: result = Catalog.GetPluralString ("{0} week", "{0} weeks", plural_count); break;
+ case TimeFactor.Month: result = Catalog.GetPluralString ("{0} month", "{0} months", plural_count); break;
+ case TimeFactor.Year: result = Catalog.GetPluralString ("{0} year", "{0} years", plural_count); break;
+ default: return null;
+ }
+ } else {
+ switch (factor) {
+ case TimeFactor.Second: result = plural_count == 1 ? "{0} second" : "{0} seconds"; break;
+ case TimeFactor.Minute: result = plural_count == 1 ? "{0} minute" : "{0} minutes"; break;
+ case TimeFactor.Hour: result = plural_count == 1 ? "{0} hour" : "{0} hours"; break;
+ case TimeFactor.Day: result = plural_count == 1 ? "{0} day" : "{0} days"; break;
+ case TimeFactor.Week: result = plural_count == 1 ? "{0} week" : "{0} weeks"; break;
+ case TimeFactor.Month: result = plural_count == 1 ? "{0} month" : "{0} months"; break;
+ case TimeFactor.Year: result = plural_count == 1 ? "{0} year" : "{0} years"; break;
+ default: return null;
+ }
}
- return String.Format (translated, StringUtil.DoubleToTenthsPrecision (count));
+ return String.Format (result, StringUtil.DoubleToTenthsPrecision (
+ count, false, translate ? NumberFormatInfo.CurrentInfo : NumberFormatInfo.InvariantInfo));
}
}
}
diff --git a/src/Libraries/Hyena/Hyena/StringUtil.cs b/src/Libraries/Hyena/Hyena/StringUtil.cs
index c19cada..5386083 100644
--- a/src/Libraries/Hyena/Hyena/StringUtil.cs
+++ b/src/Libraries/Hyena/Hyena/StringUtil.cs
@@ -146,12 +146,13 @@ namespace Hyena
public static string DoubleToTenthsPrecision (double num, bool always_decimal)
{
+ return DoubleToTenthsPrecision (num, always_decimal, NumberFormatInfo.CurrentInfo);
+ }
+
+ public static string DoubleToTenthsPrecision (double num, bool always_decimal, IFormatProvider provider)
+ {
num = Math.Round (num, 1, MidpointRounding.ToEven);
- return String.Format (
- !always_decimal && num == (int)num
- ? "{0:N0}" : "{0:N1}",
- num
- );
+ return String.Format (provider, !always_decimal && num == (int)num ? "{0:N0}" : "{0:N1}", num);
}
// This method helps us pluralize doubles. Probably a horrible i18n idea.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]