-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✨ Numeric Date Entry - enable custom culture #145
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Text; | ||
using Smartway.UiComponent.Inputs; | ||
|
||
namespace Smartway.UiComponent.UnitTests.Inputs.NumericDateInput | ||
{ | ||
class TestableNumericDateEntry: NumericDateEntry | ||
{ | ||
public new DateTime GetFilledDate() => base.GetFilledDate(); | ||
} | ||
} | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65,6 +65,21 @@ public ICommand ErrorCommand | |
set => SetValue(ErrorCommandProperty, value); | ||
} | ||
|
||
private CultureInfo _culture; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pour résumer, l'objectif c'est que dans l'appli on utilise ce composant systématiquement avec une culture à "calendrier grégorien" ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Pas tout a fait. Ce composant est le date input de SDET. Je rajoute à ce composant la possibilité de spécifier une culture différente de la culture par défaut du device. Une fois que ce sera fait, je pourrais retourner dans l'app xamarin et mettre à jour partout où ce composant est utilisé. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm, je ne comprends pas la nuance. On est bien d'accord que l'objectif c'est que dans l'app, on n'utilise plus ce composant que dans sa version "avec spécification d'une culture" ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah, oui, j'avais mal lu la question. J'avais compris "on utilise systématiquement ce composant quand on veut afficher une date" >< Oui, on utilisera systématiquement avec une culture spécifiée There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Aaah ok, merci ;) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Par contre je me rends compte que ce n'est pas exactement ce que j'avais compris ce matin. Je pensais que dans le ToString on pourrait préciser un type de calendrier, pas une culture. Du coup par exemple on passera quoi comme "culture" dans l'app pour in fine avoir un calendrier grégorien ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Je pensais aussi ça ce matin ^^ Sauf que pour formatter un datetime, il n'attend pas juste un calendrier mais un IFormatProvider (que CultureInfo implémente) car il y a d'autres paramètres (comme l'ordre JOUR / MOIS / ANNEE de certains affichages). Ce que je suis en train de faire côté app xamarin, c'est que quand c'est la culture thai, je fournit une autre culture au toString (pour l'instant je suis partit sur la français, mais c'est le temps de mes tests. Il faudra qu eje trouve la plus adaptée) et pour toutes les autres cultures, je fournis la culture du device. Comme ça on impacte uniquement le thai There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah ! Bon ça me rassure j'étais pas à côté de la plaque x) |
||
public CultureInfo Culture | ||
{ | ||
get | ||
{ | ||
if (_culture != null) | ||
{ | ||
return _culture; | ||
} | ||
|
||
return CultureInfo.CurrentCulture; | ||
} | ||
set => _culture = value; | ||
} | ||
|
||
private List<Entry> _dateEntries; | ||
public Entry DayEntry; | ||
public Entry MonthEntry; | ||
|
@@ -98,7 +113,7 @@ protected virtual DateTime GetFilledDate() | |
{ | ||
var day = int.Parse(DayEntry.Text); | ||
var month = int.Parse(MonthEntry.Text); | ||
var year = CultureInfo.CurrentCulture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text)); | ||
var year = Culture.Calendar.ToFourDigitYear(int.Parse(YearEntry.Text)); | ||
|
||
return new DateTime(year, month, day); | ||
} | ||
|
@@ -158,9 +173,9 @@ private void SetEntriesPlaceHolders() | |
|
||
private void SetDateTimePlaceholder() | ||
{ | ||
DayEntry.Placeholder = DatePlaceholder.ToString("dd"); | ||
MonthEntry.Placeholder = DatePlaceholder.ToString("MM"); | ||
YearEntry.Placeholder = DatePlaceholder.ToString("yy"); | ||
DayEntry.Placeholder = DatePlaceholder.ToString("dd", Culture); | ||
MonthEntry.Placeholder = DatePlaceholder.ToString("MM", Culture); | ||
YearEntry.Placeholder = DatePlaceholder.ToString("yy", Culture); | ||
} | ||
|
||
protected virtual void SetFilledDate() | ||
|
@@ -170,9 +185,9 @@ protected virtual void SetFilledDate() | |
|
||
var date = (DateTime)FilledDateTime; | ||
|
||
DayEntry.Text = date.ToString("dd"); | ||
MonthEntry.Text = date.ToString("MM"); | ||
YearEntry.Text = date.ToString("yy"); | ||
DayEntry.Text = date.ToString("dd", Culture); | ||
MonthEntry.Text = date.ToString("MM", Culture); | ||
YearEntry.Text = date.ToString("yy", Culture); | ||
} | ||
|
||
private void SetEntriesPosition() | ||
|
@@ -221,15 +236,13 @@ private void SetDefaultPlaceholder() | |
|
||
private bool IsDayMonthCalendar() | ||
{ | ||
var calendarType = | ||
CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.MonthDayPattern; | ||
var calendarType = Culture.DateTimeFormat.MonthDayPattern; | ||
return calendarType.IndexOf("d") < calendarType.IndexOf("M"); | ||
} | ||
|
||
private bool IsYearsFirstCalendar() | ||
{ | ||
var calendarType = | ||
CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name).DateTimeFormat.YearMonthPattern; | ||
var calendarType = Culture.DateTimeFormat.YearMonthPattern; | ||
return calendarType.IndexOf("y") < calendarType.IndexOf("M"); | ||
} | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C'est quoi l'interet de cette classe si la seule méthode que tu créees c'est la même méthode que la classe mère? ^^
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je la rend public
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Haha le fourbe, je connaissais pas cette méthode, j'approuve!