diff --git a/Gemfile.lock b/Gemfile.lock index 2288987d..94755cfa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,17 +17,17 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.2.0) - aws-partitions (1.551.0) - aws-sdk-core (3.125.5) + aws-partitions (1.554.0) + aws-sdk-core (3.126.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.525.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.53.0) - aws-sdk-core (~> 3, >= 3.125.0) + aws-sdk-kms (1.54.0) + aws-sdk-core (~> 3, >= 3.126.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.111.3) - aws-sdk-core (~> 3, >= 3.125.0) + aws-sdk-s3 (1.112.0) + aws-sdk-core (~> 3, >= 3.126.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.4) aws-sigv4 (1.4.0) @@ -86,7 +86,7 @@ GEM escape (0.0.4) ethon (0.15.0) ffi (>= 1.15.0) - excon (0.90.0) + excon (0.91.0) faraday (1.9.3) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) @@ -116,7 +116,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.2.6) - fastlane (2.203.0) + fastlane (2.204.2) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -155,8 +155,8 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - fastlane-plugin-json (1.0.0) - fastlane-plugin-sentry (1.11.0) + fastlane-plugin-json (1.1.0) + fastlane-plugin-sentry (1.11.1) fastlane-plugin-versioning_android (0.1.0) fastlane-plugin-yarn (1.2) ffi (1.15.4) diff --git a/package.json b/package.json index 5c0627f1..17bf8d9c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "native": "220206", "major": 3, "minor": 4, - "patch": 1, + "patch": 2, "expo": "44.0.0" }, "description": "tooot app for Mastodon", diff --git a/src/components/Timeline/Shared/Filtered.tsx b/src/components/Timeline/Shared/Filtered.tsx index c1dc2afd..82c8f2e9 100644 --- a/src/components/Timeline/Shared/Filtered.tsx +++ b/src/components/Timeline/Shared/Filtered.tsx @@ -46,7 +46,7 @@ export const shouldFilter = ({ let shouldFilter = false if (!ownAccount) { const parser = new htmlparser2.Parser({ - ontext (text: string) { + ontext: (text: string) => { const checkFilter = (filter: Mastodon.Filter) => { const escapedPhrase = filter.phrase.replace( /[.*+?^${}()|[\]\\]/g, @@ -54,7 +54,7 @@ export const shouldFilter = ({ ) // $& means the whole matched string switch (filter.whole_word) { case true: - if (new RegExp('\\b' + escapedPhrase + '\\b').test(text)) { + if (new RegExp('\\B' + escapedPhrase + '\\B').test(text)) { shouldFilter = true } break diff --git a/src/i18n/en/screens/tabs.json b/src/i18n/en/screens/tabs.json index 79d5b652..838c2802 100644 --- a/src/i18n/en/screens/tabs.json +++ b/src/i18n/en/screens/tabs.json @@ -240,6 +240,9 @@ "cancel": "$t(common:buttons.cancel)" } }, + "feedback": { + "heading": "Feature Requests" + }, "support": { "heading": "Support tooot" }, diff --git a/src/i18n/vi/components/parse.json b/src/i18n/vi/components/parse.json index 3240627b..ccfb69d0 100644 --- a/src/i18n/vi/components/parse.json +++ b/src/i18n/vi/components/parse.json @@ -1,8 +1,8 @@ { "HTML": { "expanded": { - "true": "Thu gọn {{hint}}", - "false": "Mở rộng {{hint}}" + "true": "Cuộn {{hint}}", + "false": "Mở {{hint}}" }, "defaultHint": "Tút" } diff --git a/src/i18n/vi/components/relativeTime.json b/src/i18n/vi/components/relativeTime.json index 501807fe..c5fffdb1 100644 --- a/src/i18n/vi/components/relativeTime.json +++ b/src/i18n/vi/components/relativeTime.json @@ -2,7 +2,7 @@ "strings": { "prefixAgo": "", "prefixFromNow": "", - "suffixAgo": "trước", + "suffixAgo": " trước", "suffixFromNow": "", "seconds": "%d giây", "minute": "một phút", diff --git a/src/i18n/vi/components/timeline.json b/src/i18n/vi/components/timeline.json index 2e4d305c..2adc2b90 100644 --- a/src/i18n/vi/components/timeline.json +++ b/src/i18n/vi/components/timeline.json @@ -27,7 +27,7 @@ "follow_request": "{{name}} yêu cầu theo dõi bạn", "poll": "Cuộc bình chọn đã kết thúc", "reblog": { - "default": "{{name}} đã chia sẻ", + "default": "{{name}} chia sẻ", "notification": "{{name}} chia sẻ tút của bạn" } }, @@ -62,7 +62,7 @@ }, "attachment": { "sensitive": { - "button": "Hiện nội dung nhạy cảm" + "button": "NSFW" }, "unsupported": { "text": "Không hỗ trợ định dạng", @@ -74,14 +74,16 @@ "accessibilityHint": "Đến trang cá nhân {{name}}" }, "content": { - "expandHint": "nội dung bị ẩn" + "expandHint": "nội dung ẩn" }, "filtered": "Đã lọc", "fullConversation": "Xem thêm", "translate": { "default": "Dịch", "succeed": "Dịch bằng {{provider}} từ {{source}}", - "failed": "Không thể dịch!" + "failed": "Không thể dịch!", + "source_not_supported": "không hỗ trợ ngôn ngữ tút", + "target_not_supported": "Ngôn ngữ đích không hỗ trợ" }, "header": { "shared": { @@ -93,7 +95,7 @@ "accessibilityHint": "Tài khoản" } }, - "application": "Đăng bằng {{application}}", + "application": "via {{application}}", "muted": { "accessibilityLabel": "Đã ẩn tút" }, @@ -107,7 +109,7 @@ } }, "conversation": { - "withAccounts": "Với", + "withAccounts": "Với ", "delete": { "function": "Xóa nhắn riêng" } @@ -146,16 +148,16 @@ }, "share": { "status": { - "heading": "Tút", + "heading": "Chia sẻ", "button": "Chia sẻ URL tút" }, "account": { - "heading": "Chia sẻ người dùng", + "heading": "Chia sẻ", "button": "Chia sẻ URL người dùng này" } }, "status": { - "heading": "Về tút", + "heading": "Đối với tút", "delete": { "function": "Xóa tút", "button": "Xóa tút này" diff --git a/src/i18n/vi/screens/actions.json b/src/i18n/vi/screens/actions.json index ff9993c3..e248b0aa 100644 --- a/src/i18n/vi/screens/actions.json +++ b/src/i18n/vi/screens/actions.json @@ -5,7 +5,7 @@ "cancel": "$t(common:buttons.cancel)" }, "notificationsFilter": { - "heading": "Hiện những dạng thông báo", + "heading": "Chỉ hiện thông báo", "content": { "follow": "$t(screenTabs:me.push.follow.heading)", "favourite": "$t(screenTabs:me.push.favourite.heading)", diff --git a/src/i18n/vi/screens/compose.json b/src/i18n/vi/screens/compose.json index ebc28f52..09a5ae8e 100644 --- a/src/i18n/vi/screens/compose.json +++ b/src/i18n/vi/screens/compose.json @@ -15,7 +15,7 @@ "button": { "default": "Tút", "conversation": "Tin nhắn", - "reply": "Lượt trả lời", + "reply": "Trả lời", "edit": "Tút" }, "alert": { @@ -63,7 +63,7 @@ "option": { "placeholder": { "accessibilityLabel": "Tùy chọn bình chọn {{index}}", - "single": "Chỉ được chọn một", + "single": "Lựa chọn", "multiple": "Nhiều lựa chọn" } }, @@ -117,7 +117,7 @@ }, "visibility": { "accessibilityLabel": "Tút thuộc dạng {{visibility}}", - "title": "Dạng tút", + "title": "Kiểu tút", "options": { "public": "Công khai", "unlisted": "Hạn chế", diff --git a/src/i18n/vi/screens/tabs.json b/src/i18n/vi/screens/tabs.json index 60ac665b..949d30ef 100644 --- a/src/i18n/vi/screens/tabs.json +++ b/src/i18n/vi/screens/tabs.json @@ -53,7 +53,7 @@ "name": "Thông báo đẩy" }, "profile": { - "name": "Trang cá nhân" + "name": "Cài đặt cá nhân" }, "profileName": { "name": "Tên hiển thị mới" @@ -65,7 +65,7 @@ "name": "Metadata" }, "settings": { - "name": "Cài đặt App" + "name": "Thiết lập" }, "switch": { "name": "Chuyển đổi tài khoản" @@ -102,22 +102,22 @@ }, "avatar": { "title": "Ảnh đại diện", - "description": "Sẽ tự động chuyển còn 400x400px" + "description": "Tự động nén xuống 400x400px" }, "header": { "title": "Ảnh bìa", - "description": "Sẽ tự động chuyển còn 1500x1500px" + "description": "Tự động nén xuống 1500x500px" }, "note": { "title": "Mô tả" }, "fields": { "title": "Metadata", - "total": "{{count}} trường", - "total_plural": "{{count}} trường" + "total": "{{count}} mục", + "total_plural": "{{count}} mục" }, "visibility": { - "title": "Dạng tút", + "title": "Kiểu tút mặc định", "options": { "public": "Công khai", "unlisted": "Hạn chế", @@ -126,19 +126,19 @@ } }, "sensitive": { - "title": "Đăng nội dung nhạy cảm" + "title": "Đây là tài khoản NSFW" }, "lock": { "title": "Đây là tài khoản riêng tư", "description": "Tự bạn sẽ phê duyệt người theo dõi" }, "bot": { - "title": "Tài khoản bot", + "title": "Đây là tài khoản Bot", "description": "Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật" } }, "fields": { - "group": "Nhóm {{index}}", + "group": "Mục {{index}}", "label": "Nhãn", "content": "Nội dung" } @@ -250,13 +250,13 @@ "heading": "Liên hệ tooot" }, "analytics": { - "heading": "Đóng góp ý kiến", - "description": "Chỉ thu thập thông tin không liên quan người dùng" + "heading": "Thu thập dữ liệu", + "description": "Giúp cải thiện chất lượng app" }, "version": "Phiên bản {{version}}" }, "switch": { - "existing": "Chọn từ màn hình đăng nhập", + "existing": "Đã đăng nhập trước đó", "new": "Đăng nhập máy chủ" } }, @@ -283,11 +283,11 @@ }, "search": { "header": { - "prefix": "Đang tìm...", + "prefix": "Tìm kiếm", "placeholder": "về..." }, "empty": { - "general": "Nhập từ khóa $t(screenTabs:shared.search.sections.accounts)$t(screenTabs:shared.search.sections.hashtags) hoặc$t(screenTabs:shared.search.sections.statuses)", + "general": "Tìm $t(screenTabs:shared.search.sections.accounts), $t(screenTabs:shared.search.sections.hashtags) hoặc $t(screenTabs:shared.search.sections.statuses)", "advanced": { "header": "Tìm kiếm nâng cao", "example": { @@ -310,12 +310,12 @@ }, "users": { "accounts": { - "following": "Đang theo dõi {{count}}", + "following": "{{count}} Theo dõi", "followers": "{{count}} người theo dõi" }, "statuses": { - "reblogged_by": "{{count}} người chia sẻ", - "favourited_by": "{{count}} người thích" + "reblogged_by": "{{count}} chia sẻ", + "favourited_by": "{{count}} thích" } } } diff --git a/src/i18n/zh-Hans/screens/tabs.json b/src/i18n/zh-Hans/screens/tabs.json index 3c9ea0f6..dee9282f 100644 --- a/src/i18n/zh-Hans/screens/tabs.json +++ b/src/i18n/zh-Hans/screens/tabs.json @@ -240,6 +240,9 @@ "cancel": "$t(common:buttons.cancel)" } }, + "feedback": { + "heading": "功能建议" + }, "support": { "heading": "赞助 tooot 开发" }, diff --git a/src/screens/Tabs/Me/Settings/Tooot.tsx b/src/screens/Tabs/Me/Settings/Tooot.tsx index 08456970..06a6cdb9 100644 --- a/src/screens/Tabs/Me/Settings/Tooot.tsx +++ b/src/screens/Tabs/Me/Settings/Tooot.tsx @@ -11,7 +11,7 @@ import React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { getInstanceActive } from '@utils/slices/instancesSlice' -import { isCandidate, isDevelopment } from '@utils/checkEnvironment' +import { isDevelopment, isRelease } from '@utils/checkEnvironment' const SettingsTooot: React.FC = () => { const instanceActive = useSelector(getInstanceActive) @@ -21,6 +21,21 @@ const SettingsTooot: React.FC = () => { return ( + + } + iconBack='ChevronRight' + onPress={() => { + analytics('settings_feedback_press') + Linking.openURL('https://feedback.tooot.app/') + }} + /> { Linking.openURL('https://www.buymeacoffee.com/xmflsct') }} /> - {isDevelopment || isCandidate ? ( + {isDevelopment || isRelease ? (