diff --git a/app/.gitignore b/app/.gitignore index d9a86a57c..53edac5e4 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,3 +1,3 @@ .gitignore /build -app.iml +*.iml diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 3c594bdfa..7dd98003a 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -1074,7 +1074,7 @@ public class VideoDetailFragment if (info.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) { videoCountView.setText(Localization.listeningCount(activity, info.getViewCount())); } else if (info.getStreamType().equals(StreamType.LIVE_STREAM)) { - videoCountView.setText(Localization.watchingCount(activity, info.getViewCount())); + videoCountView.setText(Localization.localizeWatchingCount(activity, info.getViewCount())); } else { videoCountView.setText(Localization.localizeViewCount(activity, info.getViewCount())); } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index c20ff0fc2..7b7a08a48 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -370,7 +370,7 @@ public class ChannelFragment extends BaseListInfoFragment { headerSubscribersTextView.setVisibility(View.VISIBLE); if (result.getSubscriberCount() >= 0) { - headerSubscribersTextView.setText(Localization.localizeSubscribersCount(activity, result.getSubscriberCount())); + headerSubscribersTextView.setText(Localization.shortSubscriberCount(activity, result.getSubscriberCount())); } else { headerSubscribersTextView.setText(R.string.subscribers_count_not_available); } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index f2e8aa244..fcb3eafa7 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -190,7 +190,7 @@ public class SearchFragment SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); isSuggestionsEnabled = preferences.getBoolean(getString(R.string.show_search_suggestions_key), true); - contentCountry = preferences.getString(getString(R.string.content_country_key), getString(R.string.default_country_value)); + contentCountry = preferences.getString(getString(R.string.content_country_key), getString(R.string.default_localization_key)); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java index c48934d10..1dfbbca3f 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamInfoItemHolder.java @@ -60,7 +60,7 @@ public class StreamInfoItemHolder extends StreamMiniInfoItemHolder { if (infoItem.getStreamType().equals(StreamType.AUDIO_LIVE_STREAM)) { viewsAndDate = Localization.listeningCount(itemBuilder.getContext(), infoItem.getViewCount()); } else if (infoItem.getStreamType().equals(StreamType.LIVE_STREAM)) { - viewsAndDate = Localization.watchingCount(itemBuilder.getContext(), infoItem.getViewCount()); + viewsAndDate = Localization.shortWatchingCount(itemBuilder.getContext(), infoItem.getViewCount()); } else { viewsAndDate = Localization.shortViewCount(itemBuilder.getContext(), infoItem.getViewCount()); } diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java index c90aff1c9..b78751496 100644 --- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java @@ -43,6 +43,7 @@ import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.TimeZone; import java.util.Vector; @@ -377,8 +378,12 @@ public class ErrorActivity extends AppCompatActivity { } private String getContentLangString() { - return PreferenceManager.getDefaultSharedPreferences(this) + String contentLanguage = PreferenceManager.getDefaultSharedPreferences(this) .getString(this.getString(R.string.content_country_key), "none"); + if (contentLanguage.equals(getString(R.string.default_localization_key))) { + contentLanguage = Locale.getDefault().toString(); + } + return contentLanguage; } private String getOsString() { diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 7bb931309..d5f46fb22 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -1,12 +1,13 @@ package org.schabi.newpipe.settings; import android.content.SharedPreferences; +import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.provider.Settings; -import android.view.View; import androidx.annotation.Nullable; +import androidx.preference.ListPreference; import com.google.android.material.snackbar.Snackbar; @@ -21,6 +22,24 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //initializing R.array.seek_duration_description to display the translation of seconds + Resources res = getResources(); + String[] durationsValues = res.getStringArray(R.array.seek_duration_value); + String[] durationsDescriptions = res.getStringArray(R.array.seek_duration_description); + int currentDurationValue; + for (int i = 0; i < durationsDescriptions.length; i++) { + currentDurationValue = Integer.parseInt(durationsValues[i]) / 1000; + try { + durationsDescriptions[i] = String.format( + res.getQuantityString(R.plurals.dynamic_seek_duration_description, currentDurationValue), + currentDurationValue); + } catch (Resources.NotFoundException ignored) { + //if this happens, the translation is missing, and the english string will be displayed instead + } + } + ListPreference durations = (ListPreference) findPreference(getString(R.string.seek_duration_key)); + durations.setEntries(durationsDescriptions); + listener = (sharedPreferences, s) -> { // on M and above, if user chooses to minimise to popup player on exit and the app doesn't have diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java index 6149118cc..cd66ec3c2 100644 --- a/app/src/main/java/org/schabi/newpipe/util/Localization.java +++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java @@ -48,8 +48,8 @@ import java.util.Locale; public class Localization { - private static PrettyTime prettyTime; private static final String DOT_SEPARATOR = " • "; + private static PrettyTime prettyTime; private Localization() { } @@ -83,14 +83,20 @@ public class Localization { public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization(final Context context) { final String contentLanguage = PreferenceManager .getDefaultSharedPreferences(context) - .getString(context.getString(R.string.content_language_key), context.getString(R.string.default_language_value)); + .getString(context.getString(R.string.content_language_key), context.getString(R.string.default_localization_key)); + if (contentLanguage.equals(context.getString(R.string.default_localization_key))) { + return org.schabi.newpipe.extractor.localization.Localization.fromLocale(Locale.getDefault()); + } return org.schabi.newpipe.extractor.localization.Localization.fromLocalizationCode(contentLanguage); } public static ContentCountry getPreferredContentCountry(final Context context) { final String contentCountry = PreferenceManager .getDefaultSharedPreferences(context) - .getString(context.getString(R.string.content_country_key), context.getString(R.string.default_country_value)); + .getString(context.getString(R.string.content_country_key), context.getString(R.string.default_localization_key)); + if (contentCountry.equals(context.getString(R.string.default_localization_key))) { + return new ContentCountry(Locale.getDefault().getCountry()); + } return new ContentCountry(contentCountry); } @@ -98,7 +104,7 @@ public class Localization { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); String languageCode = sp.getString(context.getString(R.string.content_language_key), - context.getString(R.string.default_language_value)); + context.getString(R.string.default_localization_key)); try { if (languageCode.length() == 2) { @@ -114,8 +120,7 @@ public class Localization { } public static String localizeNumber(Context context, long number) { - Locale locale = getPreferredLocale(context); - NumberFormat nf = NumberFormat.getInstance(locale); + NumberFormat nf = NumberFormat.getInstance(getAppLocale(context)); return nf.format(number); } @@ -132,14 +137,14 @@ public class Localization { return getQuantity(context, R.plurals.views, R.string.no_views, viewCount, localizeNumber(context, viewCount)); } - public static String localizeSubscribersCount(Context context, long subscriberCount) { - return getQuantity(context, R.plurals.subscribers, R.string.no_subscribers, subscriberCount, localizeNumber(context, subscriberCount)); - } - public static String localizeStreamCount(Context context, long streamCount) { return getQuantity(context, R.plurals.videos, R.string.no_videos, streamCount, localizeNumber(context, streamCount)); } + public static String localizeWatchingCount(Context context, long watchingCount) { + return getQuantity(context, R.plurals.watching, R.string.no_one_watching, watchingCount, localizeNumber(context, watchingCount)); + } + public static String shortCount(Context context, long count) { if (count >= 1000000000) { return Long.toString(count / 1000000000) + context.getString(R.string.short_billion); @@ -156,7 +161,7 @@ public class Localization { return getQuantity(context, R.plurals.listening, R.string.no_one_listening, listeningCount, shortCount(context, listeningCount)); } - public static String watchingCount(Context context, long watchingCount) { + public static String shortWatchingCount(Context context, long watchingCount) { return getQuantity(context, R.plurals.watching, R.string.no_one_watching, watchingCount, shortCount(context, watchingCount)); } @@ -215,7 +220,9 @@ public class Localization { } public static String relativeTime(Calendar calendarTime) { - return getPrettyTime().formatUnrounded(calendarTime); + String time = getPrettyTime().formatUnrounded(calendarTime); + return time.startsWith("-") ? time.substring(1) : time; + //workaround fix for russian showing -1 day ago, -19hrs ago… } private static void changeAppLanguage(Locale loc, Resources res) { @@ -226,10 +233,10 @@ public class Localization { } public static Locale getAppLocale(Context context) { - SharedPreferences prefs = androidx.preference.PreferenceManager.getDefaultSharedPreferences(context); - String lang = prefs.getString("app_language_key", "en"); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String lang = prefs.getString(context.getString(R.string.app_language_key), "en"); Locale loc; - if (lang.equals("system")) { + if (lang.equals(context.getString(R.string.default_localization_key))) { loc = Locale.getDefault(); } else if (lang.matches(".*-.*")) { //to differentiate different versions of the language diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java index 8929cc654..6726e4cfc 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java @@ -44,7 +44,7 @@ public class ServiceHelper { public static String getTranslatedFilterString(String filter, Context c) { switch (filter) { case "all": return c.getString(R.string.all); - case "videos": return c.getString(R.string.videos); + case "videos": return c.getString(R.string.videos_string); case "channels": return c.getString(R.string.channels); case "playlists": return c.getString(R.string.playlists); case "tracks": return c.getString(R.string.tracks); diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml index 7467a79cf..6468c6784 100644 --- a/app/src/main/res/layout-land/activity_player_queue_control.xml +++ b/app/src/main/res/layout-land/activity_player_queue_control.xml @@ -304,10 +304,9 @@ android:paddingLeft="4dp" android:paddingRight="4dp" android:gravity="center" - android:text="@string/duration_live_button" + android:text="@string/duration_live" android:textAllCaps="true" android:textColor="?attr/colorAccent" - android:maxLength="4" android:background="?attr/selectableItemBackground" android:visibility="gone"/> diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml index 98017b132..8e11b99f3 100644 --- a/app/src/main/res/layout-large-land/activity_main_player.xml +++ b/app/src/main/res/layout-large-land/activity_main_player.xml @@ -442,10 +442,9 @@ android:paddingLeft="4dp" android:paddingRight="4dp" android:gravity="center" - android:text="@string/duration_live_button" + android:text="@string/duration_live" android:textAllCaps="true" android:textColor="@android:color/white" - android:maxLength="4" android:visibility="gone" android:background="?attr/selectableItemBackground" tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" /> diff --git a/app/src/main/res/layout/activity_main_player.xml b/app/src/main/res/layout/activity_main_player.xml index ab9eb8a61..804434456 100644 --- a/app/src/main/res/layout/activity_main_player.xml +++ b/app/src/main/res/layout/activity_main_player.xml @@ -440,10 +440,9 @@ android:paddingLeft="4dp" android:paddingRight="4dp" android:gravity="center" - android:text="@string/duration_live_button" + android:text="@string/duration_live" android:textAllCaps="true" android:textColor="@android:color/white" - android:maxLength="4" android:visibility="gone" android:background="?attr/selectableItemBackground" tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" /> diff --git a/app/src/main/res/layout/activity_player_queue_control.xml b/app/src/main/res/layout/activity_player_queue_control.xml index e113075af..d17a7007a 100644 --- a/app/src/main/res/layout/activity_player_queue_control.xml +++ b/app/src/main/res/layout/activity_player_queue_control.xml @@ -154,10 +154,9 @@ android:paddingLeft="4dp" android:paddingRight="4dp" android:gravity="center" - android:text="@string/duration_live_button" + android:text="@string/duration_live" android:textAllCaps="true" android:textColor="?attr/colorAccent" - android:maxLength="4" android:background="?attr/selectableItemBackground" android:visibility="gone"/> diff --git a/app/src/main/res/layout/player_popup.xml b/app/src/main/res/layout/player_popup.xml index 9fbc22145..28c730913 100644 --- a/app/src/main/res/layout/player_popup.xml +++ b/app/src/main/res/layout/player_popup.xml @@ -208,10 +208,9 @@ android:paddingLeft="4dp" android:paddingRight="4dp" android:gravity="center_vertical" - android:text="@string/duration_live_button" + android:text="@string/duration_live" android:textAllCaps="true" android:textColor="@android:color/white" - android:maxLength="4" android:visibility="gone" android:background="?attr/selectableItemBackground" tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" /> diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 33f24695f..aa34644d1 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -537,9 +537,13 @@ Forviŝi la historion de elŝutoj Forviŝi elŝutitajn dosierojn %1$s elŝutoj forviŝitaj + Filmetoj Doni la permeson por afiŝiĝi supre aliaj apoj Lingvo de la apo Sistemnormo Premu « Finita » kiam solvita Finita + + %s sekundoj + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f21e0e074..bc1720975 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -201,13 +201,13 @@ %s подписчик %s подписчика - %s подписчиков + %s подписчиков Нет просмотров %s просмотр %s просмотра - %s просмотров + %s просмотров Нет видео diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index cdb29ca86..b5bf738fb 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -31,6 +31,8 @@ seek_duration 10000 + 5 seconds 10 seconds 15 seconds @@ -161,8 +163,6 @@ show_comments stream_info_selected_tab show_hold_to_append - en - GB content_language peertube_instance_setup peertube_selected_instance @@ -265,8 +265,11 @@ update_app_key update_pref_screen_key + + system + @string/default_localization_key af az id @@ -346,6 +349,7 @@ ko + @string/systems_language Afrikaans Azərbaycan Bahasa Indonesia @@ -427,6 +431,7 @@ + @string/systems_language Afghanistan Aland Islands Albania @@ -677,6 +682,7 @@ + @string/default_localization_key AF AX AL @@ -928,7 +934,7 @@ - system + @string/default_localization_key ar az ast diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a70d9eaa..148a339a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,9 +138,8 @@ Play Content Age restricted content - Show age restricted video. Future changes are possible from the settings. Live - Live + Show age restricted video. Future changes are possible from the settings. Downloads Downloads Error report @@ -149,8 +148,7 @@ Channels Playlist Playlists - Videos - Comments + Videos Tracks Users Events @@ -594,4 +592,8 @@ Choose an instance App language System default + %s seconds + + %s seconds + diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml index 197c14487..8fe8a66af 100644 --- a/app/src/main/res/xml/content_settings.xml +++ b/app/src/main/res/xml/content_settings.xml @@ -6,7 +6,7 @@