Browse Source
Merge remote-tracking branch 'upstream/master'
renovate/org.robolectric-robolectric-4.x
Merge remote-tracking branch 'upstream/master'
renovate/org.robolectric-robolectric-4.x
Ammar Githam
4 years ago
69 changed files with 1767 additions and 1040 deletions
-
12README.md
-
6app/src/github/res/values-de/strings.xml
-
6app/src/github/res/values-ko/strings.xml
-
6app/src/github/res/values-nl/strings.xml
-
6app/src/github/res/values-ru/strings.xml
-
6app/src/github/res/values-vi/strings.xml
-
2app/src/main/java/awais/instagrabber/activities/MainActivity.java
-
2app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java
-
40app/src/main/java/awais/instagrabber/fragments/settings/PreferenceKeys.java
-
43app/src/main/java/awais/instagrabber/fragments/settings/PreferenceKeys.kt
-
95app/src/main/java/awais/instagrabber/utils/Constants.java
-
92app/src/main/java/awais/instagrabber/utils/Constants.kt
-
26app/src/main/java/awais/instagrabber/utils/ExoplayerUtils.java
-
22app/src/main/java/awais/instagrabber/utils/ExoplayerUtils.kt
-
47app/src/main/java/awais/instagrabber/utils/PasswordUtils.java
-
52app/src/main/java/awais/instagrabber/utils/PasswordUtils.kt
-
122app/src/main/java/awais/instagrabber/utils/TextUtils.java
-
75app/src/main/java/awais/instagrabber/utils/TextUtils.kt
-
74app/src/main/java/awais/instagrabber/utils/UrlEncoder.java
-
2app/src/main/res/values-ca/arrays.xml
-
14app/src/main/res/values-ca/strings.xml
-
2app/src/main/res/values-cs/arrays.xml
-
42app/src/main/res/values-cs/strings.xml
-
2app/src/main/res/values-de/arrays.xml
-
74app/src/main/res/values-de/strings.xml
-
2app/src/main/res/values-el/arrays.xml
-
18app/src/main/res/values-el/strings.xml
-
2app/src/main/res/values-es/arrays.xml
-
18app/src/main/res/values-es/strings.xml
-
2app/src/main/res/values-eu/arrays.xml
-
14app/src/main/res/values-eu/strings.xml
-
2app/src/main/res/values-fa/arrays.xml
-
14app/src/main/res/values-fa/strings.xml
-
2app/src/main/res/values-fr/arrays.xml
-
18app/src/main/res/values-fr/strings.xml
-
2app/src/main/res/values-hi/arrays.xml
-
14app/src/main/res/values-hi/strings.xml
-
2app/src/main/res/values-in/arrays.xml
-
13app/src/main/res/values-in/strings.xml
-
2app/src/main/res/values-it/arrays.xml
-
18app/src/main/res/values-it/strings.xml
-
2app/src/main/res/values-ja/arrays.xml
-
91app/src/main/res/values-ja/strings.xml
-
62app/src/main/res/values-ko/arrays.xml
-
488app/src/main/res/values-ko/strings.xml
-
2app/src/main/res/values-mk/arrays.xml
-
14app/src/main/res/values-mk/strings.xml
-
6app/src/main/res/values-nl/arrays.xml
-
412app/src/main/res/values-nl/strings.xml
-
2app/src/main/res/values-or/arrays.xml
-
12app/src/main/res/values-or/strings.xml
-
2app/src/main/res/values-pl/arrays.xml
-
18app/src/main/res/values-pl/strings.xml
-
2app/src/main/res/values-pt/arrays.xml
-
18app/src/main/res/values-pt/strings.xml
-
2app/src/main/res/values-ru/arrays.xml
-
20app/src/main/res/values-ru/strings.xml
-
2app/src/main/res/values-sk/arrays.xml
-
16app/src/main/res/values-sk/strings.xml
-
2app/src/main/res/values-sv/arrays.xml
-
222app/src/main/res/values-sv/strings.xml
-
2app/src/main/res/values-tr/arrays.xml
-
14app/src/main/res/values-tr/strings.xml
-
2app/src/main/res/values-vi/arrays.xml
-
329app/src/main/res/values-vi/strings.xml
-
2app/src/main/res/values-zh-rCN/arrays.xml
-
17app/src/main/res/values-zh-rCN/strings.xml
-
2app/src/main/res/values-zh-rTW/arrays.xml
-
31app/src/main/res/values-zh-rTW/strings.xml
@ -1,6 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="enable_sentry">Enable Sentry</string> |
|||
<string name="sentry_summary">Sentry is a listener/handler for errors that asynchronously sends out the error/event to Sentry.io</string> |
|||
<string name="sentry_start_next_launch">Sentry will start on next launch</string> |
|||
<string name="enable_sentry">Aktiviere Sentry</string> |
|||
<string name="sentry_summary">Sentry ist ein Listener/Handler für Fehler, der den Fehler/das Ereignis asynchron an Sentry.io sendet</string> |
|||
<string name="sentry_start_next_launch">Sentry startet beim nächsten Start</string> |
|||
</resources> |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="enable_sentry">Sentry 활성화</string> |
|||
<string name="sentry_summary">Sentry는 Sentry.io에 오류를 비동기적으로 보내는 오류 처리기입니다</string> |
|||
<string name="sentry_start_next_launch">Sentry는 다음 출시에 시작됩니다</string> |
|||
</resources> |
@ -1,6 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="enable_sentry">Enable Sentry</string> |
|||
<string name="sentry_summary">Sentry is a listener/handler for errors that asynchronously sends out the error/event to Sentry.io</string> |
|||
<string name="sentry_start_next_launch">Sentry will start on next launch</string> |
|||
<string name="enable_sentry">Sentry inschakelen</string> |
|||
<string name="sentry_summary">Sentry is een luister/handler voor fouten die asynchroon de fout/gebeurtenis versturen naar Sentry.io</string> |
|||
<string name="sentry_start_next_launch">Sentry zal starten bij de volgende lancering</string> |
|||
</resources> |
@ -1,6 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="enable_sentry">Включить режим \"часового\"</string> |
|||
<string name="sentry_summary">\"Часовой\" - это слушатель/обработчик ошибок, который асинхронно отправляет ошибку/событие на Sentry.io</string> |
|||
<string name="sentry_start_next_launch">\"Часовой\" будет запущен при следующем запуске</string> |
|||
<string name="enable_sentry">Включить Sentry</string> |
|||
<string name="sentry_summary">Sentry - это обработчик событий, который асинхронно отправляет сообщения об ошибках/поломках на Sentry.io</string> |
|||
<string name="sentry_start_next_launch">Sentry включится при следующем запуске приложения</string> |
|||
</resources> |
@ -1,6 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="enable_sentry">Enable Sentry</string> |
|||
<string name="sentry_summary">Sentry is a listener/handler for errors that asynchronously sends out the error/event to Sentry.io</string> |
|||
<string name="sentry_start_next_launch">Sentry will start on next launch</string> |
|||
<string name="enable_sentry">Bật Sentry</string> |
|||
<string name="sentry_summary">Sentry là một thiết bị nghe/giải quyết cho những lỗi mà gửi những lỗi/sự kiện đến Sentry.io một cách tách biệt</string> |
|||
<string name="sentry_start_next_launch">Sentry sẽ được bật vào lần khởi động kế tiếp</string> |
|||
</resources> |
@ -1,40 +0,0 @@ |
|||
package awais.instagrabber.fragments.settings; |
|||
|
|||
public final class PreferenceKeys { |
|||
// new boolean prefs |
|||
public static final String PREF_ENABLE_DM_NOTIFICATIONS = "enable_dm_notifications"; |
|||
public static final String PREF_ENABLE_DM_AUTO_REFRESH = "enable_dm_auto_refresh"; |
|||
public static final String PREF_ENABLE_DM_AUTO_REFRESH_FREQ_UNIT = "enable_dm_auto_refresh_freq_unit"; |
|||
public static final String PREF_ENABLE_DM_AUTO_REFRESH_FREQ_NUMBER = "enable_dm_auto_refresh_freq_number"; |
|||
public static final String PREF_ENABLE_SENTRY = "enable_sentry"; |
|||
public static final String PREF_TAB_ORDER = "tab_order"; |
|||
public static final String PREF_SHOWN_COUNT_TOOLTIP = "shown_count_tooltip"; |
|||
public static final String PREF_SEARCH_FOCUS_KEYBOARD = "search_focus_keyboard"; |
|||
// string prefs |
|||
public static final String FOLDER_PATH = "custom_path"; |
|||
public static final String DATE_TIME_FORMAT = "date_time_format"; |
|||
public static final String DATE_TIME_SELECTION = "date_time_selection"; |
|||
public static final String CUSTOM_DATE_TIME_FORMAT = "date_time_custom_format"; |
|||
public static final String APP_THEME = "app_theme_v19"; |
|||
public static final String APP_LANGUAGE = "app_language_v19"; |
|||
public static final String STORY_SORT = "story_sort"; |
|||
// set string prefs |
|||
public static final String KEYWORD_FILTERS = "keyword_filters"; |
|||
// old boolean prefs |
|||
public static final String DOWNLOAD_USER_FOLDER = "download_user_folder"; |
|||
public static final String TOGGLE_KEYWORD_FILTER = "toggle_keyword_filter"; |
|||
public static final String DOWNLOAD_PREPEND_USER_NAME = "download_user_name"; |
|||
public static final String PLAY_IN_BACKGROUND = "play_in_background"; |
|||
public static final String FOLDER_SAVE_TO = "saved_to"; |
|||
public static final String AUTOPLAY_VIDEOS = "autoplay_videos"; |
|||
public static final String MUTED_VIDEOS = "muted_videos"; |
|||
public static final String SHOW_CAPTIONS = "show_captions"; |
|||
public static final String CUSTOM_DATE_TIME_FORMAT_ENABLED = "data_time_custom_enabled"; |
|||
public static final String SWAP_DATE_TIME_FORMAT_ENABLED = "swap_date_time_enabled"; |
|||
public static final String MARK_AS_SEEN = "mark_as_seen"; |
|||
public static final String HIDE_MUTED_REELS = "hide_muted_reels"; |
|||
public static final String DM_MARK_AS_SEEN = "dm_mark_as_seen"; |
|||
public static final String CHECK_ACTIVITY = "check_activity"; |
|||
public static final String CHECK_UPDATES = "check_updates"; |
|||
public static final String FLAG_SECURE = "flag_secure"; |
|||
} |
@ -0,0 +1,43 @@ |
|||
package awais.instagrabber.fragments.settings |
|||
|
|||
object PreferenceKeys { |
|||
// new boolean prefs |
|||
const val PREF_ENABLE_DM_NOTIFICATIONS = "enable_dm_notifications" |
|||
const val PREF_ENABLE_DM_AUTO_REFRESH = "enable_dm_auto_refresh" |
|||
const val PREF_ENABLE_DM_AUTO_REFRESH_FREQ_UNIT = "enable_dm_auto_refresh_freq_unit" |
|||
const val PREF_ENABLE_DM_AUTO_REFRESH_FREQ_NUMBER = "enable_dm_auto_refresh_freq_number" |
|||
const val PREF_ENABLE_SENTRY = "enable_sentry" |
|||
const val PREF_TAB_ORDER = "tab_order" |
|||
const val PREF_SHOWN_COUNT_TOOLTIP = "shown_count_tooltip" |
|||
const val PREF_SEARCH_FOCUS_KEYBOARD = "search_focus_keyboard" |
|||
|
|||
// string prefs |
|||
const val FOLDER_PATH = "custom_path" |
|||
const val DATE_TIME_FORMAT = "date_time_format" |
|||
const val DATE_TIME_SELECTION = "date_time_selection" |
|||
const val CUSTOM_DATE_TIME_FORMAT = "date_time_custom_format" |
|||
const val APP_THEME = "app_theme_v19" |
|||
const val APP_LANGUAGE = "app_language_v19" |
|||
const val STORY_SORT = "story_sort" |
|||
|
|||
// set string prefs |
|||
const val KEYWORD_FILTERS = "keyword_filters" |
|||
|
|||
// old boolean prefs |
|||
const val DOWNLOAD_USER_FOLDER = "download_user_folder" |
|||
const val TOGGLE_KEYWORD_FILTER = "toggle_keyword_filter" |
|||
const val DOWNLOAD_PREPEND_USER_NAME = "download_user_name" |
|||
const val PLAY_IN_BACKGROUND = "play_in_background" |
|||
const val FOLDER_SAVE_TO = "saved_to" |
|||
const val AUTOPLAY_VIDEOS = "autoplay_videos" |
|||
const val MUTED_VIDEOS = "muted_videos" |
|||
const val SHOW_CAPTIONS = "show_captions" |
|||
const val CUSTOM_DATE_TIME_FORMAT_ENABLED = "data_time_custom_enabled" |
|||
const val SWAP_DATE_TIME_FORMAT_ENABLED = "swap_date_time_enabled" |
|||
const val MARK_AS_SEEN = "mark_as_seen" |
|||
const val HIDE_MUTED_REELS = "hide_muted_reels" |
|||
const val DM_MARK_AS_SEEN = "dm_mark_as_seen" |
|||
const val CHECK_ACTIVITY = "check_activity" |
|||
const val CHECK_UPDATES = "check_updates" |
|||
const val FLAG_SECURE = "flag_secure" |
|||
} |
@ -1,95 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
public final class Constants { |
|||
public static final String CRASH_REPORT_EMAIL = "[email protected]"; |
|||
|
|||
// int prefs, do not export |
|||
public static final String PREV_INSTALL_VERSION = "prevVersion"; |
|||
public static final String BROWSER_UA_CODE = "browser_ua_code"; |
|||
public static final String APP_UA_CODE = "app_ua_code"; |
|||
// never Export |
|||
public static final String COOKIE = "cookie"; |
|||
// deprecated: public static final String SHOW_QUICK_ACCESS_DIALOG = "show_quick_dlg"; |
|||
public static final String DEVICE_UUID = "device_uuid"; |
|||
public static final String BROWSER_UA = "browser_ua"; |
|||
public static final String APP_UA = "app_ua"; |
|||
//////////////////////// EXTRAS //////////////////////// |
|||
public static final String EXTRAS_USER = "user"; |
|||
public static final String EXTRAS_HASHTAG = "hashtag"; |
|||
public static final String EXTRAS_LOCATION = "location"; |
|||
public static final String EXTRAS_USERNAME = "username"; |
|||
public static final String EXTRAS_ID = "id"; |
|||
public static final String EXTRAS_POST = "post"; |
|||
public static final String EXTRAS_PROFILE = "profile"; |
|||
public static final String EXTRAS_TYPE = "type"; |
|||
public static final String EXTRAS_NAME = "name"; |
|||
public static final String EXTRAS_STORIES = "stories"; |
|||
public static final String EXTRAS_HIGHLIGHT = "highlight"; |
|||
public static final String EXTRAS_INDEX = "index"; |
|||
public static final String EXTRAS_THREAD_MODEL = "threadModel"; |
|||
public static final String EXTRAS_FOLLOWERS = "followers"; |
|||
public static final String EXTRAS_SHORTCODE = "shortcode"; |
|||
public static final String EXTRAS_END_CURSOR = "endCursor"; |
|||
public static final String FEED = "feed"; |
|||
public static final String FEED_ORDER = "feedOrder"; |
|||
|
|||
// Notification ids |
|||
public static final int ACTIVITY_NOTIFICATION_ID = 10; |
|||
public static final int DM_UNREAD_PARENT_NOTIFICATION_ID = 20; |
|||
public static final int DM_CHECK_NOTIFICATION_ID = 11; |
|||
|
|||
// see https://github.com/dilame/instagram-private-api/blob/master/src/core/constants.ts |
|||
// public static final String SUPPORTED_CAPABILITIES = "[ { \"name\": \"SUPPORTED_SDK_VERSIONS\", \"value\":" + |
|||
// " \"13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0," + |
|||
// "32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0," + |
|||
// "52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0\" }, { \"name\": \"FACE_TRACKER_VERSION\", " + |
|||
// "\"value\": 12 }, { \"name\": \"segmentation\", \"value\": \"segmentation_enabled\" }, { \"name\": \"COMPRESSION\", " + |
|||
// "\"value\": \"ETC2_COMPRESSION\" }, { \"name\": \"world_tracker\", \"value\": \"world_tracker_enabled\" }, { \"name\": " + |
|||
// "\"gyroscope\", \"value\": \"gyroscope_enabled\" } ]"; |
|||
// public static final String SIGNATURE_VERSION = "4"; |
|||
// public static final String SIGNATURE_KEY = "9193488027538fd3450b83b7d05286d4ca9599a0f7eeed90d8c85925698a05dc"; |
|||
public static final String BREADCRUMB_KEY = "iN4$aGr0m"; |
|||
public static final int LOGIN_RESULT_CODE = 5000; |
|||
public static final String SKIPPED_VERSION = "skipped_version"; |
|||
public static final String DEFAULT_TAB = "default_tab"; |
|||
public static final String PREF_DARK_THEME = "dark_theme"; |
|||
public static final String PREF_LIGHT_THEME = "light_theme"; |
|||
public static final String DEFAULT_HASH_TAG_PIC = "https://www.instagram.com/static/images/hashtag/search-hashtag-default-avatar.png/1d8417c9a4f5.png"; |
|||
public static final String SHARED_PREFERENCES_NAME = "settings"; |
|||
public static final String PREF_POSTS_LAYOUT = "posts_layout"; |
|||
public static final String PREF_PROFILE_POSTS_LAYOUT = "profile_posts_layout"; |
|||
public static final String PREF_TOPIC_POSTS_LAYOUT = "topic_posts_layout"; |
|||
public static final String PREF_HASHTAG_POSTS_LAYOUT = "hashtag_posts_layout"; |
|||
public static final String PREF_LOCATION_POSTS_LAYOUT = "location_posts_layout"; |
|||
public static final String PREF_LIKED_POSTS_LAYOUT = "liked_posts_layout"; |
|||
public static final String PREF_TAGGED_POSTS_LAYOUT = "tagged_posts_layout"; |
|||
public static final String PREF_SAVED_POSTS_LAYOUT = "saved_posts_layout"; |
|||
public static final String PREF_EMOJI_VARIANTS = "emoji_variants"; |
|||
public static final String PREF_REACTIONS = "reactions"; |
|||
|
|||
public static final String ACTIVITY_CHANNEL_ID = "activity"; |
|||
public static final String ACTIVITY_CHANNEL_NAME = "Activity"; |
|||
public static final String DOWNLOAD_CHANNEL_ID = "download"; |
|||
public static final String DOWNLOAD_CHANNEL_NAME = "Downloads"; |
|||
public static final String DM_UNREAD_CHANNEL_ID = "dmUnread"; |
|||
public static final String DM_UNREAD_CHANNEL_NAME = "Messages"; |
|||
public static final String SILENT_NOTIFICATIONS_CHANNEL_ID = "silentNotifications"; |
|||
public static final String SILENT_NOTIFICATIONS_CHANNEL_NAME = "Silent notifications"; |
|||
|
|||
public static final String NOTIF_GROUP_NAME = "awais.instagrabber.InstaNotif"; |
|||
public static final String GROUP_KEY_DM = "awais.instagrabber.MESSAGES"; |
|||
public static final String GROUP_KEY_SILENT_NOTIFICATIONS = "awais.instagrabber.SILENT_NOTIFICATIONS"; |
|||
|
|||
public static final int SHOW_ACTIVITY_REQUEST_CODE = 1738; |
|||
public static final int SHOW_DM_THREAD = 2000; |
|||
public static final int DM_SYNC_SERVICE_REQUEST_CODE = 3000; |
|||
public static final int GLOBAL_NETWORK_ERROR_DIALOG_REQUEST_CODE = 7777; |
|||
|
|||
public static final String ACTION_SHOW_ACTIVITY = "show_activity"; |
|||
public static final String ACTION_SHOW_DM_THREAD = "show_dm_thread"; |
|||
|
|||
public static final String DM_THREAD_ACTION_EXTRA_THREAD_ID = "thread_id"; |
|||
public static final String DM_THREAD_ACTION_EXTRA_THREAD_TITLE = "thread_title"; |
|||
|
|||
public static final String X_IG_APP_ID = "936619743392459"; |
|||
} |
@ -0,0 +1,92 @@ |
|||
package awais.instagrabber.utils |
|||
|
|||
object Constants { |
|||
const val CRASH_REPORT_EMAIL = "[email protected]" |
|||
|
|||
// int prefs, do not export |
|||
const val PREV_INSTALL_VERSION = "prevVersion" |
|||
const val BROWSER_UA_CODE = "browser_ua_code" |
|||
const val APP_UA_CODE = "app_ua_code" |
|||
|
|||
// never Export |
|||
const val COOKIE = "cookie" |
|||
|
|||
// deprecated: public static final String SHOW_QUICK_ACCESS_DIALOG = "show_quick_dlg"; |
|||
const val DEVICE_UUID = "device_uuid" |
|||
const val BROWSER_UA = "browser_ua" |
|||
const val APP_UA = "app_ua" |
|||
|
|||
//////////////////////// EXTRAS //////////////////////// |
|||
const val EXTRAS_USER = "user" |
|||
const val EXTRAS_HASHTAG = "hashtag" |
|||
const val EXTRAS_LOCATION = "location" |
|||
const val EXTRAS_USERNAME = "username" |
|||
const val EXTRAS_ID = "id" |
|||
const val EXTRAS_POST = "post" |
|||
const val EXTRAS_PROFILE = "profile" |
|||
const val EXTRAS_TYPE = "type" |
|||
const val EXTRAS_NAME = "name" |
|||
const val EXTRAS_STORIES = "stories" |
|||
const val EXTRAS_HIGHLIGHT = "highlight" |
|||
const val EXTRAS_INDEX = "index" |
|||
const val EXTRAS_THREAD_MODEL = "threadModel" |
|||
const val EXTRAS_FOLLOWERS = "followers" |
|||
const val EXTRAS_SHORTCODE = "shortcode" |
|||
const val EXTRAS_END_CURSOR = "endCursor" |
|||
const val FEED = "feed" |
|||
const val FEED_ORDER = "feedOrder" |
|||
|
|||
// Notification ids |
|||
const val ACTIVITY_NOTIFICATION_ID = 10 |
|||
const val DM_UNREAD_PARENT_NOTIFICATION_ID = 20 |
|||
const val DM_CHECK_NOTIFICATION_ID = 11 |
|||
|
|||
// see https://github.com/dilame/instagram-private-api/blob/master/src/core/constants.ts |
|||
// public static final String SUPPORTED_CAPABILITIES = "[ { \"name\": \"SUPPORTED_SDK_VERSIONS\", \"value\":" + |
|||
// " \"13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0," + |
|||
// "32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0," + |
|||
// "52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0\" }, { \"name\": \"FACE_TRACKER_VERSION\", " + |
|||
// "\"value\": 12 }, { \"name\": \"segmentation\", \"value\": \"segmentation_enabled\" }, { \"name\": \"COMPRESSION\", " + |
|||
// "\"value\": \"ETC2_COMPRESSION\" }, { \"name\": \"world_tracker\", \"value\": \"world_tracker_enabled\" }, { \"name\": " + |
|||
// "\"gyroscope\", \"value\": \"gyroscope_enabled\" } ]"; |
|||
// public static final String SIGNATURE_VERSION = "4"; |
|||
// public static final String SIGNATURE_KEY = "9193488027538fd3450b83b7d05286d4ca9599a0f7eeed90d8c85925698a05dc"; |
|||
const val BREADCRUMB_KEY = "iN4\$aGr0m" |
|||
const val LOGIN_RESULT_CODE = 5000 |
|||
const val SKIPPED_VERSION = "skipped_version" |
|||
const val DEFAULT_TAB = "default_tab" |
|||
const val PREF_DARK_THEME = "dark_theme" |
|||
const val PREF_LIGHT_THEME = "light_theme" |
|||
const val DEFAULT_HASH_TAG_PIC = "https://www.instagram.com/static/images/hashtag/search-hashtag-default-avatar.png/1d8417c9a4f5.png" |
|||
const val SHARED_PREFERENCES_NAME = "settings" |
|||
const val PREF_POSTS_LAYOUT = "posts_layout" |
|||
const val PREF_PROFILE_POSTS_LAYOUT = "profile_posts_layout" |
|||
const val PREF_TOPIC_POSTS_LAYOUT = "topic_posts_layout" |
|||
const val PREF_HASHTAG_POSTS_LAYOUT = "hashtag_posts_layout" |
|||
const val PREF_LOCATION_POSTS_LAYOUT = "location_posts_layout" |
|||
const val PREF_LIKED_POSTS_LAYOUT = "liked_posts_layout" |
|||
const val PREF_TAGGED_POSTS_LAYOUT = "tagged_posts_layout" |
|||
const val PREF_SAVED_POSTS_LAYOUT = "saved_posts_layout" |
|||
const val PREF_EMOJI_VARIANTS = "emoji_variants" |
|||
const val PREF_REACTIONS = "reactions" |
|||
const val ACTIVITY_CHANNEL_ID = "activity" |
|||
const val ACTIVITY_CHANNEL_NAME = "Activity" |
|||
const val DOWNLOAD_CHANNEL_ID = "download" |
|||
const val DOWNLOAD_CHANNEL_NAME = "Downloads" |
|||
const val DM_UNREAD_CHANNEL_ID = "dmUnread" |
|||
const val DM_UNREAD_CHANNEL_NAME = "Messages" |
|||
const val SILENT_NOTIFICATIONS_CHANNEL_ID = "silentNotifications" |
|||
const val SILENT_NOTIFICATIONS_CHANNEL_NAME = "Silent notifications" |
|||
const val NOTIF_GROUP_NAME = "awais.instagrabber.InstaNotif" |
|||
const val GROUP_KEY_DM = "awais.instagrabber.MESSAGES" |
|||
const val GROUP_KEY_SILENT_NOTIFICATIONS = "awais.instagrabber.SILENT_NOTIFICATIONS" |
|||
const val SHOW_ACTIVITY_REQUEST_CODE = 1738 |
|||
const val SHOW_DM_THREAD = 2000 |
|||
const val DM_SYNC_SERVICE_REQUEST_CODE = 3000 |
|||
const val GLOBAL_NETWORK_ERROR_DIALOG_REQUEST_CODE = 7777 |
|||
const val ACTION_SHOW_ACTIVITY = "show_activity" |
|||
const val ACTION_SHOW_DM_THREAD = "show_dm_thread" |
|||
const val DM_THREAD_ACTION_EXTRA_THREAD_ID = "thread_id" |
|||
const val DM_THREAD_ACTION_EXTRA_THREAD_TITLE = "thread_title" |
|||
const val X_IG_APP_ID = "936619743392459" |
|||
} |
@ -1,26 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import android.content.Context; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import com.google.android.exoplayer2.database.ExoDatabaseProvider; |
|||
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory; |
|||
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; |
|||
import com.google.android.exoplayer2.upstream.cache.CacheDataSource; |
|||
import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor; |
|||
import com.google.android.exoplayer2.upstream.cache.SimpleCache; |
|||
|
|||
public final class ExoplayerUtils { |
|||
private static final long MAX_CACHE_BYTES = 1048576; |
|||
private static final LeastRecentlyUsedCacheEvictor cacheEvictor = new LeastRecentlyUsedCacheEvictor(MAX_CACHE_BYTES); |
|||
|
|||
public static DefaultMediaSourceFactory getCachedMediaSourceFactory(@NonNull final Context context) { |
|||
final ExoDatabaseProvider exoDatabaseProvider = new ExoDatabaseProvider(context); |
|||
final SimpleCache simpleCache = new SimpleCache(context.getCacheDir(), cacheEvictor, exoDatabaseProvider); |
|||
final CacheDataSource.Factory cacheDataSourceFactory = new CacheDataSource.Factory() |
|||
.setCache(simpleCache) |
|||
.setUpstreamDataSourceFactory(new DefaultHttpDataSourceFactory()); |
|||
return new DefaultMediaSourceFactory(cacheDataSourceFactory); |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
package awais.instagrabber.utils |
|||
|
|||
import android.content.Context |
|||
import com.google.android.exoplayer2.database.ExoDatabaseProvider |
|||
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory |
|||
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory |
|||
import com.google.android.exoplayer2.upstream.cache.CacheDataSource |
|||
import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor |
|||
import com.google.android.exoplayer2.upstream.cache.SimpleCache |
|||
|
|||
object ExoplayerUtils { |
|||
private const val MAX_CACHE_BYTES: Long = 1048576 |
|||
private val cacheEvictor = LeastRecentlyUsedCacheEvictor(MAX_CACHE_BYTES) |
|||
fun getCachedMediaSourceFactory(context: Context): DefaultMediaSourceFactory { |
|||
val exoDatabaseProvider = ExoDatabaseProvider(context) |
|||
val simpleCache = SimpleCache(context.cacheDir, cacheEvictor, exoDatabaseProvider) |
|||
val cacheDataSourceFactory = CacheDataSource.Factory() |
|||
.setCache(simpleCache) |
|||
.setUpstreamDataSourceFactory(DefaultHttpDataSourceFactory()) |
|||
return DefaultMediaSourceFactory(cacheDataSourceFactory) |
|||
} |
|||
} |
@ -1,47 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import android.util.Base64; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.security.GeneralSecurityException; |
|||
import java.security.InvalidAlgorithmParameterException; |
|||
import java.security.InvalidKeyException; |
|||
import java.security.NoSuchAlgorithmException; |
|||
|
|||
import javax.crypto.BadPaddingException; |
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.IllegalBlockSizeException; |
|||
import javax.crypto.NoSuchPaddingException; |
|||
import javax.crypto.spec.IvParameterSpec; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
|
|||
public final class PasswordUtils { |
|||
private static final String cipherAlgo = "AES"; |
|||
private static final String cipherTran = "AES/CBC/PKCS5Padding"; |
|||
|
|||
public static byte[] dec(final String encrypted, final byte[] keyValue) throws Exception { |
|||
try { |
|||
final Cipher cipher = Cipher.getInstance(cipherTran); |
|||
final SecretKeySpec secretKey = new SecretKeySpec(keyValue, cipherAlgo); |
|||
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(new byte[16])); |
|||
return cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT | Base64.NO_PADDING | Base64.NO_WRAP)); |
|||
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) { |
|||
throw new IncorrectPasswordException(e); |
|||
} |
|||
} |
|||
|
|||
public static byte[] enc(@NonNull final String str, final byte[] keyValue) throws Exception { |
|||
final Cipher cipher = Cipher.getInstance(cipherTran); |
|||
final SecretKeySpec secretKey = new SecretKeySpec(keyValue, cipherAlgo); |
|||
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(new byte[16])); |
|||
final byte[] bytes = cipher.doFinal(str.getBytes()); |
|||
return Base64.encode(bytes, Base64.DEFAULT | Base64.NO_PADDING | Base64.NO_WRAP); |
|||
} |
|||
|
|||
public static class IncorrectPasswordException extends Exception { |
|||
public IncorrectPasswordException(final GeneralSecurityException e) { |
|||
super(e); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,52 @@ |
|||
package awais.instagrabber.utils |
|||
|
|||
import android.util.Base64 |
|||
import java.security.GeneralSecurityException |
|||
import java.security.InvalidAlgorithmParameterException |
|||
import java.security.InvalidKeyException |
|||
import java.security.NoSuchAlgorithmException |
|||
import javax.crypto.BadPaddingException |
|||
import javax.crypto.Cipher |
|||
import javax.crypto.IllegalBlockSizeException |
|||
import javax.crypto.NoSuchPaddingException |
|||
import javax.crypto.spec.IvParameterSpec |
|||
import javax.crypto.spec.SecretKeySpec |
|||
|
|||
object PasswordUtils { |
|||
private const val cipherAlgo = "AES" |
|||
private const val cipherTran = "AES/CBC/PKCS5Padding" |
|||
@JvmStatic |
|||
@Throws(Exception::class) |
|||
fun dec(encrypted: String?, keyValue: ByteArray?): ByteArray { |
|||
return try { |
|||
val cipher = Cipher.getInstance(cipherTran) |
|||
val secretKey = SecretKeySpec(keyValue, cipherAlgo) |
|||
cipher.init(Cipher.DECRYPT_MODE, secretKey, IvParameterSpec(ByteArray(16))) |
|||
cipher.doFinal(Base64.decode(encrypted, Base64.DEFAULT or Base64.NO_PADDING or Base64.NO_WRAP)) |
|||
} catch (e: NoSuchAlgorithmException) { |
|||
throw IncorrectPasswordException(e) |
|||
} catch (e: NoSuchPaddingException) { |
|||
throw IncorrectPasswordException(e) |
|||
} catch (e: InvalidAlgorithmParameterException) { |
|||
throw IncorrectPasswordException(e) |
|||
} catch (e: InvalidKeyException) { |
|||
throw IncorrectPasswordException(e) |
|||
} catch (e: BadPaddingException) { |
|||
throw IncorrectPasswordException(e) |
|||
} catch (e: IllegalBlockSizeException) { |
|||
throw IncorrectPasswordException(e) |
|||
} |
|||
} |
|||
|
|||
@JvmStatic |
|||
@Throws(Exception::class) |
|||
fun enc(str: String, keyValue: ByteArray?): ByteArray { |
|||
val cipher = Cipher.getInstance(cipherTran) |
|||
val secretKey = SecretKeySpec(keyValue, cipherAlgo) |
|||
cipher.init(Cipher.ENCRYPT_MODE, secretKey, IvParameterSpec(ByteArray(16))) |
|||
val bytes = cipher.doFinal(str.toByteArray()) |
|||
return Base64.encode(bytes, Base64.DEFAULT or Base64.NO_PADDING or Base64.NO_WRAP) |
|||
} |
|||
|
|||
class IncorrectPasswordException(e: GeneralSecurityException?) : Exception(e) |
|||
} |
@ -1,122 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import android.content.Context; |
|||
import android.text.SpannableString; |
|||
import android.text.format.DateFormat; |
|||
import android.text.format.DateUtils; |
|||
import android.text.style.URLSpan; |
|||
import android.util.Patterns; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Arrays; |
|||
import java.util.Collections; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.Locale; |
|||
import java.util.regex.Matcher; |
|||
import java.util.stream.Collectors; |
|||
|
|||
public final class TextUtils { |
|||
// extracted from String class |
|||
public static int indexOfChar(@NonNull final CharSequence sequence, final int ch, final int startIndex) { |
|||
final int max = sequence.length(); |
|||
if (startIndex < max) { |
|||
if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) { |
|||
for (int i = startIndex; i < max; i++) if (sequence.charAt(i) == ch) return i; |
|||
} else if (Character.isValidCodePoint(ch)) { |
|||
final char hi = (char) ((ch >>> 10) + (Character.MIN_HIGH_SURROGATE - (Character.MIN_SUPPLEMENTARY_CODE_POINT >>> 10))); |
|||
final char lo = (char) ((ch & 0x3ff) + Character.MIN_LOW_SURROGATE); |
|||
for (int i = startIndex; i < max; i++) |
|||
if (sequence.charAt(i) == hi && sequence.charAt(i + 1) == lo) return i; |
|||
} |
|||
} |
|||
return -1; |
|||
} |
|||
|
|||
public static CharSequence getSpannableUrl(final String url) { |
|||
if (isEmpty(url)) return url; |
|||
final int httpIndex = url.indexOf("http:"); |
|||
final int httpsIndex = url.indexOf("https:"); |
|||
if (httpIndex == -1 && httpsIndex == -1) return url; |
|||
|
|||
final int length = url.length(); |
|||
|
|||
final int startIndex = httpIndex != -1 ? httpIndex : httpsIndex; |
|||
final int spaceIndex = url.indexOf(' ', startIndex + 1); |
|||
|
|||
final int endIndex = (spaceIndex != -1 ? spaceIndex : length); |
|||
|
|||
final String extractUrl = url.substring(startIndex, Math.min(length, endIndex)); |
|||
|
|||
final SpannableString spannableString = new SpannableString(url); |
|||
spannableString.setSpan(new URLSpan(extractUrl), startIndex, endIndex, 0); |
|||
|
|||
return spannableString; |
|||
} |
|||
|
|||
public static boolean isEmpty(final CharSequence charSequence) { |
|||
if (charSequence == null || charSequence.length() < 1) return true; |
|||
if (charSequence instanceof String) { |
|||
String str = (String) charSequence; |
|||
if ("".equals(str) || "null".equals(str) || str.isEmpty()) return true; |
|||
str = str.trim(); |
|||
return "".equals(str) || "null".equals(str) || str.isEmpty(); |
|||
} |
|||
return "null".contentEquals(charSequence) || "".contentEquals(charSequence); |
|||
} |
|||
|
|||
public static String millisToTimeString(final long millis) { |
|||
return millisToTimeString(millis, false); |
|||
} |
|||
|
|||
public static String millisToTimeString(final long millis, final boolean includeHoursAlways) { |
|||
final int sec = (int) (millis / 1000) % 60; |
|||
int min = (int) (millis / (1000 * 60)); |
|||
if (min >= 60) { |
|||
min = (int) ((millis / (1000 * 60)) % 60); |
|||
final int hr = (int) ((millis / (1000 * 60 * 60)) % 24); |
|||
return String.format(Locale.ENGLISH, "%02d:%02d:%02d", hr, min, sec); |
|||
} |
|||
if (includeHoursAlways) { |
|||
return String.format(Locale.ENGLISH, "%02d:%02d:%02d", 0, min, sec); |
|||
} |
|||
return String.format(Locale.ENGLISH, "%02d:%02d", min, sec); |
|||
} |
|||
|
|||
public static String getRelativeDateTimeString(final Context context, final long from) { |
|||
final Date now = new Date(); |
|||
final Date then = new Date(from); |
|||
int days = daysBetween(from, now.getTime()); |
|||
if (days == 0) { |
|||
return DateFormat.getTimeFormat(context).format(then); |
|||
} |
|||
return DateFormat.getDateFormat(context).format(then); |
|||
} |
|||
|
|||
private static int daysBetween(long d1, long d2) { |
|||
return (int) ((d2 - d1) / DateUtils.DAY_IN_MILLIS); |
|||
} |
|||
|
|||
public static List<String> extractUrls(final String text) { |
|||
if (isEmpty(text)) return Collections.emptyList(); |
|||
final Matcher matcher = Patterns.WEB_URL.matcher(text); |
|||
final List<String> urls = new ArrayList<>(); |
|||
while (matcher.find()) { |
|||
urls.add(matcher.group()); |
|||
} |
|||
return urls; |
|||
} |
|||
|
|||
// https://github.com/notslang/instagram-id-to-url-segment |
|||
public static long shortcodeToId(final String shortcode) { |
|||
long result = 0L; |
|||
for (int i = 0; i < shortcode.length() && i < 11; i++){ |
|||
final char c = shortcode.charAt(i); |
|||
final int k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(c); |
|||
result = result * 64 + k; |
|||
} |
|||
return result; |
|||
} |
|||
} |
@ -0,0 +1,75 @@ |
|||
package awais.instagrabber.utils |
|||
|
|||
import android.content.Context |
|||
import android.text.format.DateFormat |
|||
import android.text.format.DateUtils |
|||
import android.util.Patterns |
|||
import java.util.* |
|||
|
|||
object TextUtils { |
|||
@JvmStatic |
|||
fun isEmpty(charSequence: CharSequence?): Boolean { |
|||
if (charSequence == null || charSequence.length < 1) return true |
|||
if (charSequence is String) { |
|||
var str = charSequence |
|||
if ("" == str || "null" == str || str.isEmpty()) return true |
|||
str = str.trim { it <= ' ' } |
|||
return "" == str || "null" == str || str.isEmpty() |
|||
} |
|||
return "null".contentEquals(charSequence) || "".contentEquals(charSequence) |
|||
} |
|||
|
|||
@JvmStatic |
|||
@JvmOverloads |
|||
fun millisToTimeString(millis: Long, includeHoursAlways: Boolean = false): String { |
|||
val sec = (millis / 1000).toInt() % 60 |
|||
var min = (millis / (1000 * 60)).toInt() |
|||
if (min >= 60) { |
|||
min = (millis / (1000 * 60) % 60).toInt() |
|||
val hr = (millis / (1000 * 60 * 60) % 24).toInt() |
|||
return String.format(Locale.ENGLISH, "%02d:%02d:%02d", hr, min, sec) |
|||
} |
|||
return if (includeHoursAlways) { |
|||
String.format(Locale.ENGLISH, "%02d:%02d:%02d", 0, min, sec) |
|||
} else String.format(Locale.ENGLISH, "%02d:%02d", min, sec) |
|||
} |
|||
|
|||
@JvmStatic |
|||
fun getRelativeDateTimeString(context: Context?, from: Long): String { |
|||
val now = Date() |
|||
val then = Date(from) |
|||
val days = daysBetween(from, now.time) |
|||
return if (days == 0) { |
|||
DateFormat.getTimeFormat(context).format(then) |
|||
} else DateFormat.getDateFormat(context).format(then) |
|||
} |
|||
|
|||
private fun daysBetween(d1: Long, d2: Long): Int { |
|||
return ((d2 - d1) / DateUtils.DAY_IN_MILLIS).toInt() |
|||
} |
|||
|
|||
@JvmStatic |
|||
fun extractUrls(text: String?): List<String> { |
|||
if (isEmpty(text)) return emptyList() |
|||
val matcher = Patterns.WEB_URL.matcher(text) |
|||
val urls: MutableList<String> = ArrayList() |
|||
while (matcher.find()) { |
|||
urls.add(matcher.group()) |
|||
} |
|||
return urls |
|||
} |
|||
|
|||
// https://github.com/notslang/instagram-id-to-url-segment |
|||
@JvmStatic |
|||
fun shortcodeToId(shortcode: String): Long { |
|||
var result = 0L |
|||
var i = 0 |
|||
while (i < shortcode.length && i < 11) { |
|||
val c = shortcode[i] |
|||
val k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(c) |
|||
result = result * 64 + k |
|||
i++ |
|||
} |
|||
return result |
|||
} |
|||
} |
@ -1,74 +0,0 @@ |
|||
package awais.instagrabber.utils; |
|||
|
|||
import androidx.annotation.NonNull; |
|||
|
|||
import java.io.CharArrayWriter; |
|||
import java.util.BitSet; |
|||
|
|||
// same as java.net.URLEncoder |
|||
public final class UrlEncoder { |
|||
private static final BitSet dontNeedEncoding = new BitSet(256); |
|||
private static final int caseDiff = ('a' - 'A'); |
|||
|
|||
static { |
|||
int i; |
|||
for (i = 'a'; i <= 'z'; i++) dontNeedEncoding.set(i); |
|||
for (i = 'A'; i <= 'Z'; i++) dontNeedEncoding.set(i); |
|||
for (i = '0'; i <= '9'; i++) dontNeedEncoding.set(i); |
|||
dontNeedEncoding.set(' '); |
|||
dontNeedEncoding.set('-'); |
|||
dontNeedEncoding.set('_'); |
|||
dontNeedEncoding.set('.'); |
|||
dontNeedEncoding.set('*'); |
|||
} |
|||
|
|||
@NonNull |
|||
public static String encodeUrl(@NonNull final String s) { |
|||
final StringBuilder out = new StringBuilder(s.length()); |
|||
final CharArrayWriter charArrayWriter = new CharArrayWriter(); |
|||
|
|||
boolean needToChange = false; |
|||
for (int i = 0; i < s.length(); ) { |
|||
int c = s.charAt(i); |
|||
|
|||
if (dontNeedEncoding.get(c)) { |
|||
if (c == ' ') { |
|||
c = '+'; |
|||
needToChange = true; |
|||
} |
|||
|
|||
out.append((char) c); |
|||
i++; |
|||
} else { |
|||
do { |
|||
charArrayWriter.write(c); |
|||
if (c >= 0xD800 && c <= 0xDBFF && i + 1 < s.length()) { |
|||
final int d = s.charAt(i + 1); |
|||
if (d >= 0xDC00 && d <= 0xDFFF) { |
|||
charArrayWriter.write(d); |
|||
i++; |
|||
} |
|||
} |
|||
i++; |
|||
} while (i < s.length() && !dontNeedEncoding.get(c = s.charAt(i))); |
|||
|
|||
charArrayWriter.flush(); |
|||
|
|||
final byte[] ba = charArrayWriter.toString().getBytes(); |
|||
for (final byte b : ba) { |
|||
out.append('%'); |
|||
char ch = Character.forDigit((b >> 4) & 0xF, 16); |
|||
if (Character.isLetter(ch)) ch -= caseDiff; |
|||
out.append(ch); |
|||
ch = Character.forDigit(b & 0xF, 16); |
|||
if (Character.isLetter(ch)) ch -= caseDiff; |
|||
out.append(ch); |
|||
} |
|||
charArrayWriter.reset(); |
|||
needToChange = true; |
|||
} |
|||
} |
|||
|
|||
return (needToChange ? out.toString() : s); |
|||
} |
|||
} |
@ -0,0 +1,62 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string-array name="languages"> |
|||
<item>시스템 기본 설정</item> |
|||
<item translatable="false">English</item> |
|||
<item translatable="false">Français</item> |
|||
<item translatable="false">Español</item> |
|||
<item translatable="false">简体中文</item> |
|||
<item translatable="false">Bahasa Indonesia</item> |
|||
<item translatable="false">Italiano</item> |
|||
<item translatable="false">Deutsch</item> |
|||
<item translatable="false">Polski</item> |
|||
<item translatable="false">Türkçe</item> |
|||
<item translatable="false">Português (Brasil)</item> |
|||
<item translatable="false">پارسی</item> |
|||
<item translatable="false">Македонски</item> |
|||
<item translatable="false">Tiếng Việt</item> |
|||
<item translatable="false">繁體中文</item> |
|||
<item translatable="false">Català</item> |
|||
<item translatable="false">Русский</item> |
|||
<item translatable="false">हिन्दी</item> |
|||
<item translatable="false">Nederlands</item> |
|||
<item translatable="false">Slovenčina</item> |
|||
<item translatable="false">日本語</item> |
|||
<item translatable="false">Ελληνικά</item> |
|||
<item translatable="false">Euskara</item> |
|||
<item translatable="false">Svenska</item> |
|||
<item translatable="false">한국어</item> |
|||
</string-array> |
|||
<string-array name="theme_presets"> |
|||
<item>오토 / 시스템 따르기</item> |
|||
<item>오토 / 배터리 따르기</item> |
|||
<item>다크 모드</item> |
|||
<item>라이트 모드</item> |
|||
</string-array> |
|||
<string-array name="story_sorts"> |
|||
<item>인스타그램 기본 설정</item> |
|||
<item>최신순</item> |
|||
<item>오래된순</item> |
|||
</string-array> |
|||
<string-array name="separator_presets"> |
|||
<item>없음</item> |
|||
<item>\@</item> |
|||
<item>에</item> |
|||
<item>에</item> |
|||
<item>\|</item> |
|||
<item>-</item> |
|||
</string-array> |
|||
<!-- Nav graphs should correspond 1-to-1 with the above nav graph ids --> |
|||
<!-- Titles should correspond 1-to-1 with the above nav graphs --> |
|||
<!-- Drawable should correspond 1-to-1 with the above titles --> |
|||
<!-- fragmentIds should correspond 1-to-1 with the above drawabled --> |
|||
<!-- these are the start destination of the corresponding nav graphs --> |
|||
<!--<array name="logged_out_main_nav_graphs">--> |
|||
<!-- <item>@navigation/profile_nav_graph</item>--> |
|||
<!-- <item>@navigation/more_nav_graph</item>--> |
|||
<!--</array>--> |
|||
<string-array name="dm_auto_refresh_freq_units"> |
|||
<item>초</item> |
|||
<item>분</item> |
|||
</string-array> |
|||
</resources> |
@ -0,0 +1,488 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<string name="action_about">정보</string> |
|||
<string name="action_dms">다이렉트</string> |
|||
<string name="action_settings">설정</string> |
|||
<string name="action_download">다운로드</string> |
|||
<string name="action_search">사용자 이름 검색</string> |
|||
<string name="action_compare">비교</string> |
|||
<string name="clipboard_error">텍스트 복사 오류</string> |
|||
<string name="clipboard_copied">클립보드에 복사됨</string> |
|||
<string name="report">신고</string> |
|||
<string name="set_password">비밀번호로 파일 보호</string> |
|||
<string name="password_no_max">비밀번호</string> |
|||
<string name="ok">OK</string> |
|||
<string name="yes">네</string> |
|||
<string name="cancel">취소</string> |
|||
<string name="no">아니오</string> |
|||
<string name="confirm">확인</string> |
|||
<string name="title_favorites">즐겨찾기</string> |
|||
<string name="title_discover">발견</string> |
|||
<string name="title_comments">댓글</string> |
|||
<string name="title_notifications">활동</string> |
|||
<string name="update_check">시작시 업데이트 확인</string> |
|||
<string name="flag_secure">Block screenshots & app preview</string> |
|||
<string name="download_user_folder">Download posts to username folders</string> |
|||
<string name="download_prepend_username">Prepend Username to Filename</string> |
|||
<string name="mark_as_seen_setting">Mark stories as seen after viewing</string> |
|||
<string name="mark_as_seen_setting_summary">Story author will know you viewed it</string> |
|||
<string name="hide_muted_reels_setting">Hide muted stories from feed</string> |
|||
<string name="dm_mark_as_seen_setting">Mark DM as seen after viewing</string> |
|||
<string name="dm_mark_as_seen_setting_summary">Other members will know you viewed it</string> |
|||
<string name="activity_setting">Enable activity notifications</string> |
|||
<string name="story_sort_setting">Feed stories sort</string> |
|||
<string name="error_loading_profile">Error loading profile! Is the username valid? If so, you may be ratelimited.</string> |
|||
<string name="error_loading_profile_loggedin">Error loading profile! Is the username valid? Or did they block you?</string> |
|||
<string name="error_loading_hashtag">Error loading hashtag! Is the name valid?</string> |
|||
<string name="error_loading_location">Error loading location! Is the URL valid?</string> |
|||
<string name="error_creating_folders">Error creating Download folder(s).</string> |
|||
<string name="save_to_folder">Save to custom folder</string> |
|||
<string name="select_folder">폴더 선택</string> |
|||
<string name="theme_settings">테마</string> |
|||
<string name="login_settings">Only affects logged-in users:</string> |
|||
<string name="anonymous_settings">Only affects anonymous users:</string> |
|||
<string name="select_language">언어</string> |
|||
<plurals name="main_posts_count"> |
|||
<item quantity="other">%s\n게시물</item> |
|||
</plurals> |
|||
<plurals name="main_posts_count_inline"> |
|||
<item quantity="other">%s 게시물</item> |
|||
</plurals> |
|||
<plurals name="main_posts_followers"> |
|||
<item quantity="other">%s\n팔로워</item> |
|||
</plurals> |
|||
<string name="main_posts_following">%s\n팔로잉</string> |
|||
<string name="post_viewer_autoplay_video">비디오 자동 재생</string> |
|||
<string name="post_viewer_background_play">백그라운드에서 비디오 계속</string> |
|||
<string name="post_viewer_background_play_summary">앱의 초점이 맞지 않을 때 비디오를 일시 중지하지 않음</string> |
|||
<string name="post_viewer_muted_autoplay">비디오 항상 음소거</string> |
|||
<string name="post_viewer_show_captions">게시물 문구 항상 보임</string> |
|||
<string name="post_viewer_download_dialog_title">다운로드할 것을 선택하십시오</string> |
|||
<string name="post_viewer_download_current">현재</string> |
|||
<string name="post_viewer_download_album">앨범 전체</string> |
|||
<string name="show_stories">스토리 보임</string> |
|||
<string name="no_more_stories">새 스토리 없음</string> |
|||
<string name="be_patient">기다려주세요.</string> |
|||
<string name="view_story_post">게시물 보기</string> |
|||
<string name="view_post">게시물 보기</string> |
|||
<string name="spotify">Spotify</string> |
|||
<string name="vote_story_poll">투표</string> |
|||
<string name="votef_story_poll">투표 성공!</string> |
|||
<string name="voted_story_poll">이미 투표하셨습니다</string> |
|||
<string name="respond_story">메시지 보내기</string> |
|||
<string name="answer_hint">답변...</string> |
|||
<string name="answered_story">답변 성공!</string> |
|||
<plurals name="slider_info" comment="For slider stickers in stories, eg. 3 responses averaging 17.38%"> |
|||
<item quantity="other">%d 개의 반응 평균 %s</item> |
|||
</plurals> |
|||
<string name="slider_answer">내 답변: %s</string> |
|||
<string name="reply_story">스토리 답장 보내기</string> |
|||
<string name="reply_hint">답글 달기...</string> |
|||
<string name="story_quiz">퀴즈</string> |
|||
<string name="story_slider">슬라이더</string> |
|||
<string name="story_quizzed">이미 답변하셨습나다.</string> |
|||
<string name="story_mentions">언급</string> |
|||
<string name="priv_acc">비공개 계정입니다</string> |
|||
<string name="priv_acc_confirm">언팔로우하면 게시물을 볼 수 없겠습니다. 확실합니까?</string> |
|||
<string name="no_acc">You can log in via More -> Account on the bottom-right corner or you can view public accounts without login!</string> |
|||
<string name="empty_acc">계정에 게시물이 없음</string> |
|||
<string name="empty_list">게시물 없음</string> |
|||
<string name="login">로그인</string> |
|||
<string name="logout">로그아웃</string> |
|||
<string name="logout_summary">인스타그램에서 익명으로 검색하기</string> |
|||
<string name="remove_all_acc">모든 계정 제거</string> |
|||
<string name="remove_all_acc_warning">This will remove all added accounts from the app!\nTo remove just one account, long tap the account from the account switcher dialog.\nDo you want to continue?</string> |
|||
<string name="time_settings">날짜 형식</string> |
|||
<string name="saved_create_collection">새 컬렉션 만들기</string> |
|||
<string name="edit_collection">컬렉션 이름 수정</string> |
|||
<string name="delete_collection">컬렉션 삭제</string> |
|||
<string name="delete_collection_confirm">Are you sure you want to delete this collection?</string> |
|||
<string name="delete_collection_note">All contained media will remain in other collections.</string> |
|||
<string name="add_to_collection">컬렉션에 저장...</string> |
|||
<string name="remove_from_collection">컬렉션에서 제거</string> |
|||
<string name="liked">좋아하는 게시물</string> |
|||
<string name="saved">저장됨</string> |
|||
<string name="tagged">태그됨</string> |
|||
<string name="dm_person">메시지</string> |
|||
<string name="like_without_count">좋아요</string> |
|||
<string name="unlike_without_count">좋아요 취소</string> |
|||
<string name="bookmark">북마크 하기</string> |
|||
<string name="unbookmark">북마크에서 제거</string> |
|||
<string name="follow">팔로우</string> |
|||
<string name="unfollow">팔로우 취소</string> |
|||
<string name="favorite_short" comment="Adjective, not verb">즐겨찾기</string> |
|||
<string name="block">차단</string> |
|||
<string name="unblock">차단 해제</string> |
|||
<string name="restrict">제한</string> |
|||
<string name="unrestrict">제한 해제</string> |
|||
<string name="mute_stories">스토리 음소거</string> |
|||
<string name="mute_posts">게시물 음소거</string> |
|||
<string name="unmute_stories">스토리 음소거 해제</string> |
|||
<string name="unmute_posts">게시물 음소거 해제</string> |
|||
<string name="remove_follower">Remove follower</string> |
|||
<string name="bio_copy">소개 복사</string> |
|||
<string name="bio_translate">소개 번역</string> |
|||
<string name="status_mutual">서로친구</string> |
|||
<string name="status_following">팔로잉</string> |
|||
<string name="status_follower">팔로워</string> |
|||
<string name="map">맵</string> |
|||
<string name="dialog_export_accounts">계정</string> |
|||
<string name="dialog_export_settings">설정</string> |
|||
<string name="dialog_export_favorites">즐겨찾기</string> |
|||
<string name="dialog_import_success">Successfully imported!</string> |
|||
<string name="dialog_import_failed">Failed to import!</string> |
|||
<string name="dialog_export_success">Successfully exported!</string> |
|||
<string name="dialog_export_failed">Failed to export!</string> |
|||
<string name="refresh">새로고침</string> |
|||
<string name="get_cookies">Get cookies</string> |
|||
<string name="desktop_2fa">Desktop Mode</string> |
|||
<string name="time_settings_title_custom">Use custom format</string> |
|||
<string name="time_settings_title_separator">Separator</string> |
|||
<string name="time_settings_title_time_format">시간 형식</string> |
|||
<string name="time_settings_title_date_format">날짜 형식</string> |
|||
<string name="time_settings_title_preview">미리 보기</string> |
|||
<string name="time_settings_swap_time">Swap Time and Date positions</string> |
|||
<string name="quick_access_cannot_delete_curr">Cannot delete currently in use account</string> |
|||
<string name="quick_access_confirm_delete">Are you sure you want to delete \'%s\'?</string> |
|||
<string name="open_profile">프로필 보기</string> |
|||
<string name="view_story">스토리 보기</string> |
|||
<string name="view_pfp">프로필 사진 보기</string> |
|||
<string name="dms_inbox_raven_message_unknown">Unsupported message type</string> |
|||
<string name="dms_inbox_unsend">보내기 취소</string> |
|||
<string name="dms_inbox_giphy">GIPHY에서 보기</string> |
|||
<string name="dms_inbox_shared_post">%s shared a post by @%s</string> |
|||
<string name="dms_inbox_shared_image">%s shared an image</string> |
|||
<string name="dms_inbox_shared_video">%s shared a video</string> |
|||
<string name="dms_inbox_shared_message">%s sent a message</string> |
|||
<string name="dms_inbox_shared_gif">%s shared a gif</string> |
|||
<string name="dms_inbox_shared_sticker">%s shared a sticker</string> |
|||
<string name="dms_inbox_shared_profile">%s shared a profile: @%s</string> |
|||
<string name="dms_inbox_shared_location">%s shared a location: %s</string> |
|||
<string name="dms_inbox_shared_highlight">%s shared a story highlight by @%s</string> |
|||
<string name="dms_inbox_shared_story">%s shared a story by @%s</string> |
|||
<string name="dms_inbox_shared_voice">%s sent a voice message</string> |
|||
<string name="dms_inbox_shared_clip">%s shared a clip by @%s</string> |
|||
<string name="dms_inbox_shared_igtv">%s shared an IGTV video by @%s</string> |
|||
<string name="dms_inbox_replied_story_outgoing">You replied to their story: %s</string> |
|||
<string name="dms_inbox_replied_story_incoming">%s replied to your story: %s</string> |
|||
<string name="dms_inbox_reacted_story_outgoing">You reacted to their story: %s</string> |
|||
<string name="dms_inbox_reacted_story_incoming">%s reacted to your story: %s</string> |
|||
<string name="dms_inbox_mentioned_story_outgoing">You mentioned @%s in your story</string> |
|||
<string name="dms_inbox_mentioned_story_incoming">%s mentioned you in their story</string> |
|||
<string name="dms_inbox_raven_media_unknown"><i>Unknown media type</i></string> |
|||
<string name="dms_inbox_raven_media_expired">Media expired!</string> |
|||
<string name="dms_inbox_raven_media_delivered">전달됨</string> |
|||
<string name="dms_inbox_raven_media_sent">전송됨</string> |
|||
<string name="dms_inbox_raven_media_opened">확인함</string> |
|||
<string name="dms_inbox_raven_media_replayed">재생</string> |
|||
<string name="dms_inbox_raven_media_sending">전송중…</string> |
|||
<string name="dms_inbox_raven_media_blocked">차단됨</string> |
|||
<string name="dms_inbox_raven_media_suggested">추천</string> |
|||
<string name="dms_inbox_raven_media_screenshot">스크린샷</string> |
|||
<string name="dms_inbox_raven_media_cant_deliver">Cannot deliver</string> |
|||
<string name="dms_inbox_error_null_count">Unseen count response is null!</string> |
|||
<string name="dms_thread_message_hint">메시지...</string> |
|||
<string name="dms_thread_audio_hint">Press and hold to record audio</string> |
|||
<string name="dms_thread_updating">Updating...</string> |
|||
<string name="dms_action_leave">채팅 나가기</string> |
|||
<string name="dms_action_leave_question">이 채팅에서 나가시겠습니까?</string> |
|||
<string name="dms_action_kick">Kick</string> |
|||
<string name="dms_left_users">Left users</string> |
|||
<string name="dms_ERROR_INVALID_USER">Invalid user</string> |
|||
<string name="dms_ERROR_VIDEO_TOO_LONG">Instagram does not allow uploading videos longer than 60 secs for DM.</string> |
|||
<string name="dms_ERROR_AUDIO_TOO_LONG">Instagram does not allow uploading audio longer than 60 secs.</string> |
|||
<string name="direct_download">Download directly</string> |
|||
<string name="direct_download_desc">Downloads posts directly to the phone!</string> |
|||
<string name="direct_download_loading">Fetching post(s)</string> |
|||
<string name="downloader_complete">Download completed</string> |
|||
<string name="downloader_downloading_post">Downloading post…</string> |
|||
<string name="downloader_downloading_media">Downloading media</string> |
|||
<string name="downloader_downloading_pfp">Downloading profile picture</string> |
|||
<string name="downloader_unknown_error">Unknown error occurred!!!</string> |
|||
<string name="downloader_error_creating_folder">Error creating folder!</string> |
|||
<string name="downloader_error_download_file">Error downloading file</string> |
|||
<string name="downloader_too_many">You can only download 100 posts at a time. Don\'t be too greedy!</string> |
|||
<string name="comment_viewer_copy_comment">댓글 복사</string> |
|||
<string name="comment_viewer_see_likers">좋아요 보기</string> |
|||
<string name="comment_viewer_reply_comment">답글 달기</string> |
|||
<string name="comment_viewer_like_comment">댓글 좋아요</string> |
|||
<string name="comment_viewer_unlike_comment">댓글 좋아요 삭제</string> |
|||
<string name="comment_viewer_translate_comment">댓글 번역</string> |
|||
<string name="comment_viewer_delete_comment">댓글 삭제</string> |
|||
<string name="comment_send_empty_comment">빈 댓글이 안 됍니다.</string> |
|||
<string name="comment_view_mention_user_search">Do you want to search the username?</string> |
|||
<string name="comment_view_mention_hash_search">Do you want to search the hashtag?</string> |
|||
<string name="followers_type_followers">팔로워</string> |
|||
<string name="followers_type_following">팔로잉</string> |
|||
<string name="followers_compare">Comparing followers & following</string> |
|||
<string name="followers_both_following">Both following each other</string> |
|||
<string name="followers_not_following">not following %s</string> |
|||
<string name="followers_not_follower">%s is not following</string> |
|||
<string name="login_error_loading_cookies">Error loading cookies</string> |
|||
<string name="comment_hint">Write a new comment…</string> |
|||
<string name="dm_hint">Write a new message…</string> |
|||
<string name="liked_notif">Liked your post</string> |
|||
<string name="comment_notif">Commented on your post:</string> |
|||
<string name="follow_notif">Started following you</string> |
|||
<string name="tagged_notif">Tagged you in a post</string> |
|||
<string name="request_notif">Requested following you</string> |
|||
<string name="request_approve">Approve request</string> |
|||
<string name="request_reject">Reject request</string> |
|||
<string name="share_public_post">Share this public post to…</string> |
|||
<string name="share_private_post">This is a private post! Share to those who can view it.</string> |
|||
<string name="discover_empty">This category is somehow empty…</string> |
|||
<string name="update_available">An update is available! (%s)</string> |
|||
<string name="update_notice">Reminder: If you downloaded from F-Droid, you must update from it! Same applies for GitHub.</string> |
|||
<string name="updated">Thank you for updating Barinsta!</string> |
|||
<string name="crash_title">App crashed</string> |
|||
<string name="crash_descr">Oops.. the app crashed, but don\'t worry you can send error report to the developer to help him fix the issue. (:</string> |
|||
<string name="action_notif">활동</string> |
|||
<string name="action_archive">보관됨 스토리</string> |
|||
<string name="action_ayml">프로필 추천</string> |
|||
<string name="select_picture">사진 선택</string> |
|||
<string name="uploading">업로드 중…</string> |
|||
<string name="activity_count_prefix">You have:</string> |
|||
<string name="activity_count_relationship">%d follows</string> |
|||
<string name="activity_count_comments">%d comments</string> |
|||
<string name="activity_count_commentlikes">%d comment likes</string> |
|||
<string name="activity_count_usertags">%d usertags</string> |
|||
<string name="activity_count_likes">%d likes</string> |
|||
<string name="activity_count_poy">%d photos of you</string> |
|||
<string name="activity_count_requests">%d follow requests</string> |
|||
<string name="activity_notloggedin">You logged out before clicking this notification?!</string> |
|||
<string name="feed">피드</string> |
|||
<string name="profile">프로필</string> |
|||
<string name="more">더 보기</string> |
|||
<string name="title_dm">메시지</string> |
|||
<string name="number_selected">%d selected</string> |
|||
<string name="logout_success">Successfully logged out!</string> |
|||
<string name="dm_thread_info">정보</string> |
|||
<string name="mark_as_seen">Mark as seen</string> |
|||
<string name="skip_update_checkbox">Do not show again until next update</string> |
|||
<string name="version">Version</string> |
|||
<string name="pref_start_screen">시작 화면</string> |
|||
<string name="pref_search_focus_keyboard" comment="basically bring up the keyboard immediately when someone does search">Show keyboard on search</string> |
|||
<string name="pref_category_general">일반</string> |
|||
<string name="pref_category_theme">테마</string> |
|||
<string name="pref_category_downloads">다운로드</string> |
|||
<string name="pref_category_locale">Locale</string> |
|||
<string name="account">계정</string> |
|||
<string name="account_hint">Current login not working? Simply add the account again.</string> |
|||
<string name="add_account">계정 추가하기</string> |
|||
<string name="about_category_license">License (English only)</string> |
|||
<string name="about_documentation">Visit our website</string> |
|||
<string name="about_documentation_summary">Get support, discuss, meet others, and have fun!</string> |
|||
<string name="about_repository">See our source code on GitHub</string> |
|||
<string name="about_repository_summary">Audit, star, report bugs, contribute, and have fun (again)!</string> |
|||
<string name="about_feedback">Send feedback by email</string> |
|||
<string name="about_category_3pt">Third-Party Attributions</string> |
|||
<string name="reminder">알람</string> |
|||
<string name="reminder_summary">Please use this app responsibly. Downloaded images should only be used for purposes allowed by applicable laws.</string> |
|||
<string name="light_white_theme">흰색</string> |
|||
<string name="dark_black_theme">검은색</string> |
|||
<string name="light_theme_settings">라이트테마</string> |
|||
<string name="dark_theme_settings">다크테마</string> |
|||
<string name="light_barinsta_theme" comment="Yes, this one is Barista (the theme), you can also substitute it with other coffee-related words">Barista</string> |
|||
<string name="dark_material_dark_theme">머티리얼 다크</string> |
|||
<string name="added_to_favs">즐겨찾기에 추가되었습니다!</string> |
|||
<string name="add_to_favorites">즐겨찾기에 추가</string> |
|||
<string name="accounts">계정</string> |
|||
<string name="hashtags">해시태그</string> |
|||
<string name="locations">위치</string> |
|||
<string name="unknown">알 수 없음</string> |
|||
<string name="removed_from_favs">즐겨찾기에서 삭제되었습니다!</string> |
|||
<string name="backup_and_restore">Backup & Restore</string> |
|||
<string name="backup_summary">Backup Barinsta app settings, account login data, and/or favorites to a plain text or encrypted backup file for later restoration.</string> |
|||
<string name="backup_warning">If you\'re backing up account login data, treat the file as confidential and keep it somewhere safe!</string> |
|||
<string name="create_backup">Create new backup file</string> |
|||
<string name="restore_backup">Restore from existing backup file</string> |
|||
<string name="file_chosen_label">파일:</string> |
|||
<string name="enter_password">비밀번호를 입력하세요</string> |
|||
<string name="select_backup_file">Select a backup file (.zaai/.backup)</string> |
|||
<string name="apply">적용</string> |
|||
<string name="save">저장</string> |
|||
<string name="caption">문구</string> |
|||
<string name="edit_caption">문구 수정</string> |
|||
<string name="translate_caption">문구 번역</string> |
|||
<string name="player_timeline_desc">동영상 플레이어 타임라인</string> |
|||
<string name="liking">좋아요 중...</string> |
|||
<string name="like_unsuccessful">좋아요 실패</string> |
|||
<string name="unlike_unsuccessful">좋아요 취소 실패</string> |
|||
<string name="unliking">좋아요 취소 중...</string> |
|||
<string name="controls">제어</string> |
|||
<string name="saving">저장 중...</string> |
|||
<string name="removing">제거중...</string> |
|||
<string name="save_unsuccessful">저장 실패</string> |
|||
<string name="save_remove_unsuccessful">제거 실패</string> |
|||
<string name="downloading">다운로드 중...</string> |
|||
<string name="downloader_downloading_child">%2$d중에 %1$d 다운로드</string> |
|||
<string name="delete">삭제</string> |
|||
<string name="comment">댓글 달기</string> |
|||
<string name="layout">레이아웃</string> |
|||
<string name="feed_stories">피드 스토리</string> |
|||
<string name="opening_post">게시물 열기 중...</string> |
|||
<string name="share">공유</string> |
|||
<string name="layout_style">레이아웃 스타일</string> |
|||
<string name="column_count">Column count</string> |
|||
<string name="two">2</string> |
|||
<string name="three">3</string> |
|||
<string name="show_names">이름 표시</string> |
|||
<string name="show_avatars">아바타 표시</string> |
|||
<string name="avatar_size">아바타 크기</string> |
|||
<string name="corners">모서리</string> |
|||
<string name="show_grid_gap">그리드 간격 표시</string> |
|||
<string name="disable_animation">애니메이션 비활성화</string> |
|||
<string name="follower_wait_to_load">Please wait for the current task to complete first!</string> |
|||
<string name="follower_start_compare">Depending on user counts, this can take a while to load. Please be patient.</string> |
|||
<string name="post_not_found">게시글을 찾지 못했습니다.</string> |
|||
<string name="no_external_app_url">URL을 여는 앱이 없습니다.</string> |
|||
<string name="gallery">갤러리</string> |
|||
<string name="camera">카메라</string> |
|||
<string name="all_photos">모든 사진</string> |
|||
<string name="all_media">모든 미디어</string> |
|||
<string name="all_videos">모든 동영상</string> |
|||
<string name="brightness">밝기</string> |
|||
<string name="contrast">대비</string> |
|||
<string name="vibrance">생동감</string> |
|||
<string name="saturation">채도</string> |
|||
<string name="sharpen">선명하게</string> |
|||
<string name="exposure">노출</string> |
|||
<string name="center">중앙</string> |
|||
<string name="color">색</string> |
|||
<string name="start">시작</string> |
|||
<string name="end">끝</string> |
|||
<string name="bilateral_blur">양측 블러</string> |
|||
<string name="vignette">배경 흐리게</string> |
|||
<string name="box_blur">박스 흐림</string> |
|||
<string name="sepia">세피아</string> |
|||
<string name="clarendon">Clarendon</string> |
|||
<string name="one977">1977</string> |
|||
<string name="aden">Aden</string> |
|||
<string name="reset">리셋</string> |
|||
<string name="crop">잘라내기</string> |
|||
<string name="normal">보통</string> |
|||
<plurals name="likes_count"> |
|||
<item quantity="other">좋아요 %d개</item> |
|||
</plurals> |
|||
<plurals name="replies_count"> |
|||
<item quantity="other">답장 %d개</item> |
|||
</plurals> |
|||
<plurals name="comments_count"> |
|||
<item quantity="other">댓글 %d개</item> |
|||
</plurals> |
|||
<plurals name="views_count"> |
|||
<item quantity="other">조회수 %d</item> |
|||
</plurals> |
|||
<plurals name="stories_count"> |
|||
<item quantity="other">%s개 스토리</item> |
|||
</plurals> |
|||
<string name="download_permission">Storage permission not granted!</string> |
|||
<string name="details">상세내용</string> |
|||
<string name="title">제목</string> |
|||
<string name="members">멤버</string> |
|||
<string name="admin">관리자</string> |
|||
<string name="inviter">초청자</string> |
|||
<string name="mute_messages">메시지 알림 해제</string> |
|||
<string name="mute_mentions">언급 알림 해제</string> |
|||
<string name="add_members">멤버 추가</string> |
|||
<string name="search">검색</string> |
|||
<string name="done">완료</string> |
|||
<string name="dms_action_make_admin">관리자로 지정</string> |
|||
<string name="dms_action_remove_admin">관리자 제거</string> |
|||
<string name="edit_unsuccessful">Edit was unsuccessful</string> |
|||
<string name="message">메시지</string> |
|||
<string name="reply">답장</string> |
|||
<string name="tap_to_remove">제거하려면 탭하세요</string> |
|||
<string name="forward">전달</string> |
|||
<string name="forward_outgoing">회원님이 메시지를 전달했습니다.</string> |
|||
<string name="forward_incoming">메시지를 전달했습니다.</string> |
|||
<string name="add">추가</string> |
|||
<string name="send">보내기</string> |
|||
<string name="replying_to_yourself">자신에게 답장 중</string> |
|||
<string name="replying_to_user">%s에게 답장 중</string> |
|||
<string name="replied_to_yourself">회원님이 자신에게 답장했습니다</string> |
|||
<string name="replied_you">회원님이 답장했습니다</string> |
|||
<string name="replied_you_group">회원님이 %s에게 답장했습니다</string> |
|||
<string name="replied_group">%s에게 답장했습니다</string> |
|||
<string name="replied_to_you">회원님에게 답장했습니다</string> |
|||
<string name="replied_to_themself">Replied to themself</string> |
|||
<string name="reacted_story_outgoing">회원님이 스토리에 공감했습니다</string> |
|||
<string name="reacted_story_incoming">회원님의 스토리에 공감했습니다</string> |
|||
<string name="mentioned_story_outgoing">You mentioned them in your story</string> |
|||
<string name="mentioned_story_incoming">Mentioned you in their story</string> |
|||
<string name="replied_story_outgoing">회원님이 스토리에 답장을 보냈습니다</string> |
|||
<string name="replied_story_incoming">회원님의 스토리에 답장을 보냈습니다</string> |
|||
<string name="raven_image_expired">Image has expired</string> |
|||
<string name="raven_image_info">Image will expire when seen</string> |
|||
<string name="raven_video_expired">Video has expired</string> |
|||
<string name="raven_video_info">Video will expire when seen</string> |
|||
<string name="raven_msg_expired">Message has expired</string> |
|||
<string name="raven_msg_info">Message will expire when seen</string> |
|||
<string name="story_share">\@%s\'s story</string> |
|||
<string name="story_share_highlight">\@%s\'s story highlight</string> |
|||
<string name="photo">사진</string> |
|||
<string name="video">동영상</string> |
|||
<string name="voice_message">음성 메시지</string> |
|||
<string name="post">게시물</string> |
|||
<string name="approval_required_for_new_members">가입하려면 승인 필요</string> |
|||
<string name="requests">요청</string> |
|||
<string name="admins_only">관리자 전용</string> |
|||
<string name="added_by">%s님이 추가했습니다</string> |
|||
<string name="admin_approval_required">관리자 승인 필요</string> |
|||
<string name="admin_approval_required_description">An admin approval will be required to add new members to the group</string> |
|||
<string name="dms_action_end">End chat</string> |
|||
<string name="dms_action_end_question">End chat?</string> |
|||
<string name="dms_action_end_description">All members will be removed from the group. They will still be able to view the chat history.</string> |
|||
<string name="pending_requests">Pending Requests</string> |
|||
<string name="accept_request_from_user">Accept request from %1s (%2s)?</string> |
|||
<string name="decline">거절</string> |
|||
<string name="accept">확인</string> |
|||
<string name="you">당신</string> |
|||
<string name="no_pending_requests">No pending requests</string> |
|||
<string name="checking_for_new_messages">Checking for new messages</string> |
|||
<string name="pref_category_stories">스토리</string> |
|||
<string name="pref_category_dm">메시지</string> |
|||
<string name="pref_category_notifications">알림</string> |
|||
<string name="pref_category_post">게시물</string> |
|||
<string name="enable_dm_notifications">통화 일림 활성화</string> |
|||
<string name="enable_dm_auto_refesh">Auto refresh messages</string> |
|||
<string name="auto_refresh_every">Auto refresh every</string> |
|||
<string name="secs">초</string> |
|||
<string name="mins">분</string> |
|||
<string name="search_giphy">GIPHY 검색</string> |
|||
<string name="generic_null_response">Response is null!</string> |
|||
<string name="generic_not_ok_response">Response status is not ok!</string> |
|||
<string name="generic_failed_request">Request failed!</string> |
|||
<string name="hint_keyword">Keyword</string> |
|||
<string name="toggle_keyword_filter">Enable keyword filter</string> |
|||
<string name="edit_keyword_filter">Edit keyword filters</string> |
|||
<string name="added_keywords">Added keyword: %s to filter list</string> |
|||
<string name="removed_keywords">Removed keyword: %s from filter list</string> |
|||
<string name="marked_as_seen">Marked as seen</string> |
|||
<string name="delete_unsuccessful">Delete unsuccessful</string> |
|||
<string name="throttle_error">Throttled by Instagram because of too many API requests. Wait for some time before retrying.</string> |
|||
<string name="error">오류</string> |
|||
<string name="account_logged_out">This account has been logged out.</string> |
|||
<string name="login_required">Login required!</string> |
|||
<string name="sentry_block">Sentry block.</string> |
|||
<string name="inactive_user">User is inactive!</string> |
|||
<string name="crash_report_subject">Barinsta Crash Report</string> |
|||
<string name="crash_report_title">Select an email app to send crash logs</string> |
|||
<string name="not_found">Not found!</string> |
|||
<string name="rate_limit">Your IP has been rate limited by Instagram. Wait for an hour and try again.</string> |
|||
<string name="skip_update">Skip this update</string> |
|||
<string name="on_latest_version">You\'re already on the latest version</string> |
|||
<string name="tab_order">Screen order</string> |
|||
<string name="other_tabs">Other tabs</string> |
|||
<string name="tab_order_start_next_launch">The tab order will be reflected on next launch</string> |
|||
<string name="dm_remove_warning">If saved, all DM related features will be disabled on next launch</string> |
|||
<string name="copy_caption">문구 복사</string> |
|||
<string name="copy_reply">답장 복사</string> |
|||
<string name="top">상단</string> |
|||
<string name="recent">최근</string> |
|||
<string name="clear">치우기</string> |
|||
<string name="no_external_map_app">지도 앱이 없습니다!</string> |
|||
<string name="click_to_show_full">Click to show full like count</string> |
|||
<string name="no_profile_pic_found">No profile pic found!</string> |
|||
<string name="swipe_up_confirmation">Are you sure you want to open this link?</string> |
|||
</resources> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue