Skip to content
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

Meaning of NoTime #161

Closed
francisconoriega opened this issue Apr 10, 2014 · 15 comments
Closed

Meaning of NoTime #161

francisconoriega opened this issue Apr 10, 2014 · 15 comments

Comments

@francisconoriega
Copy link

I think that the meaning/purpose of "NoTime" is ambiguous, and may affect translations.

Is it meant to mean ~Now? As in "I'll be there in no time"?

or does it really meant to be that there is literally no time?

For spanish we are currently using the latter "no hay tiempo", but if it was the former it should be something like "un instante/un momento". "Un instante" could actually kind of work in both scenarios, as it is so small that there isn't any measurable time before and after it.

I can't tell for sure if this is the case for other translations but I'm assuming there might be similar confusions.

@MehdiK
Copy link
Member

MehdiK commented Apr 10, 2014

It is the result of TimeSpan.Zero.Humanize()

You're right. It is a bit confusing. What do you propose to return for TimeSpan.Zero?!

@francisconoriega
Copy link
Author

I guess the issue is that it depends on the context, on whether its a TimeSpan.Zero in the future (~now), or if it was a TimeSpan.Zero in the past (simultaneous). "No time" in English can handle both cases, but at least for Spanish, it can't be done (at least I can't think about a single solution that is elegant)

If the string was meant to be something like
"We will call you in "+myTimeSpan.Humanize(), and myTimeSpan==TimeSpan.Zero, then it makes sense for it to be something that means right now, in a moment, in "no time".

If the text was "The time elapsed between event A and event b was "+myTimeSpan.Humanize(), then "right now"/a moment don't really work, it means two things happened simultaneously, with literally "no time" between them


suggestion:


I'm not particularly happy with it, but I think that for languages that can't accommodate both cases as gracefully as English does, 0 seconds should be used. It is not as elegant, but it still works.

  • In the future:
    "your download will complete in 0 seconds", ie, now.

  • In the past/simultaneous
    "Horse A was '0 seconds' faster than horse B".

    It's a bit robotic, and not too "human", but it is consistent and understandable in both scenarios.


What do you think?

@thunsaker
Copy link
Contributor

👍 Might be robotic, but seems to make sense in Spanish.

Can others that have contributed to localization chime in? @JonasJensen, @mexx, @mnowacki, @hazzik, @henriksen, @ekblom, @akamud, @ignorkulman, @Borzoo anything to add?

@MehdiK
Copy link
Member

MehdiK commented Apr 10, 2014

I quite like your suggestion @bangoker. Thanks.

@akamud
Copy link
Contributor

akamud commented Apr 10, 2014

The case described by @bangoker also makes sense in Portuguese. So, 0 seconds would be preferred in that case.

Can't think of a more humanized way that would work for both cases.

@JonasJensen
Copy link
Contributor

This also makes sense in danish. So yes 0 seconds is to prefer.

@henriksen
Copy link
Contributor

I agree. The TimeSpan.Zero can be used in so many different situations that you can't really have a single phrase for it. Norwegian suffers the same problems. 0 seconds may sound robotically, but it's the only single conversion that makes sense in all cases.

@mexx
Copy link
Collaborator

mexx commented Apr 11, 2014

From my point of view the problems lies in the absence of the notion of tense and case when calling Humanize on a time span and it's not limited to TimeSpan.Zero.

I pick up the examples by @bangoker.

"We will call you in "+myTimeSpan.Humanize()
"The time elapsed between event A and event B was "+myTimeSpan.Humanize()

Russian:

"мы позвоним вам через "+myTimeSpan.Humanize()
    zero -> "мы позвоним вам через миг"
1 minute -> "мы позвоним вам через одну минуту"

In this example the accusative case is used.

"Между событиями А и Б прошло: "+myTimeSpan.Humanize()
    zero -> "Между событиями А и Б прошло: миг"
1 minute -> "Между событиями А и Б прошло: одна минута"

In this example the nominative case is used.
And this one is even not fully humanized version of the example, here the one a human would use.

    zero -> "Между событиями А и Б прошел миг"
1 minute -> "Между событиями А и Б прошла минута"

Here it even changes the form of verb according to the gender of the word used for time span.

German:

"Wir rufen Sie in einem "+myTimeSpan.Humanize()+" an"
    zero -> "Wir rufen Sie in einem Augenblick an"
1 minute -> "Wir rufen Sie in einer Minute an"

In this example the dative case is used.

"Die zwischen den Ereignissen A und B vergangene Zeit war "+myTimeSpan.Humanize()
    zero -> "Die zwischen den Ereignissen A und B vergangene Zeit war ein Augenblick"
1 minute -> "Die zwischen den Ereignissen A und B vergangene Zeit war eine Minute"

In this example the nominative case is used.

With the notion of tense and case we could provide a better humanized time span.
Actually I didn't provided an example for the tense, but I can imagine to use different words for TimeSpan.Zero in future and past. But it's not that necessary as case, so we can leave it out.

@MehdiK
Copy link
Member

MehdiK commented Apr 11, 2014

Sorry @mexx, you lost me on Russian and German examples!

If you guys think passing a tense could help improve the humanization of TimeSpan then we can pass the existing Tense enum to TimeSpan.Humanize as an optional param (defaulted to Tense.Future perhaps).

@MehdiK
Copy link
Member

MehdiK commented Apr 11, 2014

FWIW if we decide to do that we should move Tense out of Localisation folder to the root.

@mexx
Copy link
Collaborator

mexx commented Apr 11, 2014

@MehdiK Sorry that you got lost in translation.
The bigger improvement would be to pass a desired Case to TimeSpan.Humanize.

@MehdiK
Copy link
Member

MehdiK commented Apr 11, 2014

Thanks. What is case? (^_^)

@mexx
Copy link
Collaborator

mexx commented Apr 11, 2014

Here a link to wikipedia article.

@MehdiK
Copy link
Member

MehdiK commented Apr 12, 2014

@mexx what you did in #147 with overloads should be a good roadmap for adding Case and Tense to TimeSpan.Humanize.

@MehdiK
Copy link
Member

MehdiK commented Apr 19, 2014

It looks like the decision with NoTime is rather unanimous and everyone is happy with the proposed solution (thanks @bangoker for the great suggestion). Also a few translations have already been submitted/changed with 0 seconds. So I'm closing this.

We could have a separate issue/PR for passing Case to TimeSpan.Humanize.

Thanks all.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants