From 83493237a59e22a61edde0f4a80450592135b403 Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Wed, 20 Feb 2019 08:49:39 -0600 Subject: [PATCH] Add support for translating time intervals --- src/invidious.cr | 20 +++++++++++--------- src/invidious/comments.cr | 6 +++--- src/invidious/helpers/utils.cr | 23 +++++++++-------------- src/invidious/views/components/item.ecr | 4 ++-- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/invidious.cr b/src/invidious.cr index 1ff94929..19b924c2 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -2558,7 +2558,7 @@ get "/api/v1/videos/:id" do |env| json.field "description", description json.field "descriptionHtml", video.description json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) json.field "keywords", video.keywords json.field "viewCount", video.views @@ -2766,7 +2766,7 @@ get "/api/v1/trending" do |env| json.field "authorUrl", "/channel/#{video.ucid}" json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) json.field "description", video.description json.field "descriptionHtml", video.description_html json.field "liveNow", video.live_now @@ -2805,7 +2805,7 @@ get "/api/v1/popular" do |env| json.field "authorId", video.ucid json.field "authorUrl", "/channel/#{video.ucid}" json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) end end end @@ -2840,7 +2840,7 @@ get "/api/v1/top" do |env| json.field "authorId", video.ucid json.field "authorUrl", "/channel/#{video.ucid}" json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) description = video.description.gsub("
", "\n") description = description.gsub("
", "\n") @@ -3015,7 +3015,7 @@ get "/api/v1/channels/:ucid" do |env| json.field "viewCount", video.views json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) json.field "lengthSeconds", video.length_seconds json.field "liveNow", video.live_now json.field "paid", video.paid @@ -3113,7 +3113,7 @@ end json.field "viewCount", video.views json.field "published", video.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) json.field "lengthSeconds", video.length_seconds json.field "liveNow", video.live_now json.field "paid", video.paid @@ -3133,6 +3133,8 @@ end ["/api/v1/channels/:ucid/latest", "/api/v1/channels/latest/:ucid"].each do |route| get route do |env| + locale = LOCALES[env.get("locale").as(String)]? + env.response.content_type = "application/json" ucid = env.params.url["ucid"] @@ -3163,7 +3165,7 @@ end json.field "viewCount", video.views json.field "published", video.published.to_unix - json.field "publishedText", "#{recode_date(video.published)} ago" + json.field "publishedText", translate(locale, "`x` ago", recode_date(video.published, locale)) json.field "lengthSeconds", video.length_seconds json.field "liveNow", video.live_now json.field "paid", video.paid @@ -3351,7 +3353,7 @@ get "/api/v1/channels/search/:ucid" do |env| json.field "viewCount", item.views json.field "published", item.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(item.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(item.published, locale)) json.field "lengthSeconds", item.length_seconds json.field "liveNow", item.live_now json.field "paid", item.paid @@ -3480,7 +3482,7 @@ get "/api/v1/search" do |env| json.field "viewCount", item.views json.field "published", item.published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(item.published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(item.published, locale)) json.field "lengthSeconds", item.length_seconds json.field "liveNow", item.live_now json.field "paid", item.paid diff --git a/src/invidious/comments.cr b/src/invidious/comments.cr index 5f1108aa..87cd4294 100644 --- a/src/invidious/comments.cr +++ b/src/invidious/comments.cr @@ -184,7 +184,7 @@ def fetch_youtube_comments(id, db, continuation, proxies, format, locale, region json.field "content", content json.field "contentHtml", content_html json.field "published", published.to_unix - json.field "publishedText", translate(locale, "`x` ago", recode_date(published)) + json.field "publishedText", translate(locale, "`x` ago", recode_date(published, locale)) json.field "likeCount", node_comment["likeCount"] json.field "commentId", node_comment["commentId"] json.field "authorIsChannelOwner", node_comment["authorIsChannelOwner"] @@ -310,7 +310,7 @@ def template_youtube_comments(comments, locale) #{child["author"]}

#{child["contentHtml"]}

- #{translate(locale, "`x` ago", recode_date(Time.unix(child["published"].as_i64)))} #{child["isEdited"] == true ? translate(locale, "(edited)") : ""} + #{translate(locale, "`x` ago", recode_date(Time.unix(child["published"].as_i64), locale))} #{child["isEdited"] == true ? translate(locale, "(edited)") : ""} | [YT] | @@ -375,7 +375,7 @@ def template_reddit_comments(root, locale) [ - ] #{author} #{translate(locale, "`x` points", number_with_separator(score))} - #{translate(locale, "`x` ago", recode_date(child.created_utc))} + #{translate(locale, "`x` ago", recode_date(child.created_utc, locale))}

#{body_html} diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr index ef2e35dd..dcf162e2 100644 --- a/src/invidious/helpers/utils.cr +++ b/src/invidious/helpers/utils.cr @@ -136,31 +136,26 @@ def decode_date(string : String) return Time.now - delta end -def recode_date(time : Time) +def recode_date(time : Time, locale) span = Time.now - time if span.total_days > 365.0 - span = {span.total_days / 365, "year"} + span = translate(locale, "`x` years", (span.total_days.to_i / 365).to_s) elsif span.total_days > 30.0 - span = {span.total_days / 30, "month"} + span = translate(locale, "`x` months", (span.total_days.to_i / 30).to_s) elsif span.total_days > 7.0 - span = {span.total_days / 7, "week"} + span = translate(locale, "`x` weeks", (span.total_days.to_i / 7).to_s) elsif span.total_hours > 24.0 - span = {span.total_days, "day"} + span = translate(locale, "`x` days", (span.total_days).to_s) elsif span.total_minutes > 60.0 - span = {span.total_hours, "hour"} + span = translate(locale, "`x` hours", (span.total_hours).to_s) elsif span.total_seconds > 60.0 - span = {span.total_minutes, "minute"} + span = translate(locale, "`x` minutes", (span.total_minutes).to_s) else - span = {span.total_seconds, "second"} + span = translate(locale, "`x` seconds", (span.total_seconds).to_s) end - span = {span[0].to_i, span[1]} - if span[0] > 1 - span = {span[0], span[1] + "s"} - end - - return span.join(" ") + return span end def number_with_separator(number) diff --git a/src/invidious/views/components/item.ecr b/src/invidious/views/components/item.ecr index 8b013907..de1c82ee 100644 --- a/src/invidious/views/components/item.ecr +++ b/src/invidious/views/components/item.ecr @@ -66,7 +66,7 @@

<% if Time.now - item.published > 1.minute %> -
<%= translate(locale, "Shared `x` ago", recode_date(item.published)) %>
+
<%= translate(locale, "Shared `x` ago", recode_date(item.published, locale)) %>
<% end %> <% else %> <% if env.get?("user") && env.get("user").as(User).preferences.thin_mode %> @@ -100,7 +100,7 @@

<% if Time.now - item.published > 1.minute %> -
<%= translate(locale, "Shared `x` ago", recode_date(item.published)) %>
+
<%= translate(locale, "Shared `x` ago", recode_date(item.published, locale)) %>
<% end %> <% end %>