From 812cba406c20c7467d248bd145d5a54fe21f997d Mon Sep 17 00:00:00 2001 From: tateisu Date: Thu, 4 Jan 2018 22:56:16 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=AB=E3=83=A9=E3=83=A0=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=81=AB=E3=80=8C=E5=BC=B7=E8=AA=BF=E8=A1=A8=E7=A4=BA=E3=81=82?= =?UTF-8?q?=E3=82=8A=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82=E3=80=8C?= =?UTF-8?q?=E6=B7=BB=E4=BB=98=E3=83=87=E3=83=BC=E3=82=BF=E3=81=82=E3=82=8A?= =?UTF-8?q?=E3=80=8D=E3=81=A8OR=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../subwaytooter/WordTrieTreeTest.java | 21 +- .../java/jp/juggler/subwaytooter/Column.java | 37 +- .../subwaytooter/ColumnViewHolder.java | 13 + .../api/entity/TootStatusLike.java | 8 +- .../subwaytooter/util/DecodeOptions.java | 1 + .../subwaytooter/util/EmojiDecoder.java | 1 + .../subwaytooter/util/HTMLDecoder.java | 1 + app/src/main/res/layout/page_column.xml | 7 +- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 585 +++++++++--------- app/src/main/res/values/strings.xml | 1 + 12 files changed, 361 insertions(+), 319 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 28d5b98d..d41c2a30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "jp.juggler.subwaytooter" minSdkVersion 21 targetSdkVersion 26 - versionCode 197 - versionName "1.9.7" + versionCode 198 + versionName "1.9.8" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } diff --git a/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.java b/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.java index 49bc809d..a532fb02 100644 --- a/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.java +++ b/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.java @@ -168,13 +168,17 @@ public class WordTrieTreeTest { @Test public void testWordTrieTree() throws Exception{ + String strTest; + { WordTrieTree trie = new WordTrieTree(); trie.add( "" ); - trie.add( " " ); + trie.add( " " ); // 単語の側に空白があっても無視される + trie.add( "ABC" ); trie.add( "abc" ); trie.add( "abcdef" ); trie.add( "bbb" ); + trie.add( "C C C" ); // 単語の側に空白があっても無視される trie.add( "ccc" ); // 空文字列や空白を登録してもマッチしない @@ -185,17 +189,20 @@ public class WordTrieTreeTest { assertEquals( true, trie.matchShort( "abc" ) ); assertEquals( true, trie.matchShort( "abcdef" ) ); - // 空白を無視してマッチする。 - ArrayList< WordTrieTree.Match > list = trie.matchList( "ZZZabcdefZZZa b cZZZbb bZZZc cc " ); + // 単語の間に空白があってもマッチする + strTest = "///abcdef///a b c///bb b///c cc "; + ArrayList< WordTrieTree.Match > list = trie.matchList( strTest); assertNotNull( list ); assertEquals( 4, list.size() ); assertEquals( "abcdef", list.get( 0 ).word ); // abcよりもabcdefを優先してマッチする - assertEquals( 3, list.get( 0 ).start ); + assertEquals( 3, list.get( 0 ).start ); // 元テキスト中でマッチした位置を取得できる assertEquals( 9, list.get( 0 ).end ); - assertEquals( "abc", list.get( 1 ).word ); + assertEquals( "ABC", list.get( 1 ).word ); // 文字種が違っても同一とみなす単語の場合、先に登録した方にマッチする assertEquals( "bbb", list.get( 2 ).word ); - assertEquals( "ccc", list.get( 3 ).word ); + assertEquals( "C C C", list.get( 3 ).word ); // 文字種が違っても同一とみなす単語の場合、先に登録した方にマッチする + assertEquals( 27, list.get( 3 ).start ); // 元テキスト中でマッチした位置を取得できる + assertEquals( 31, list.get( 3 ).end ); + assertEquals( 33, strTest.length() ); // 末尾の空白はマッチ範囲には含まれない } - } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/Column.java b/app/src/main/java/jp/juggler/subwaytooter/Column.java index 6fb8752e..5a24ab90 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Column.java +++ b/app/src/main/java/jp/juggler/subwaytooter/Column.java @@ -172,6 +172,7 @@ import jp.juggler.subwaytooter.util.Utils; static final String KEY_TYPE = "type"; static final String KEY_DONT_CLOSE = "dont_close"; private static final String KEY_WITH_ATTACHMENT = "with_attachment"; + private static final String KEY_WITH_HIGHLIGHT = "with_highlight"; private static final String KEY_DONT_SHOW_BOOST = "dont_show_boost"; private static final String KEY_DONT_SHOW_FAVOURITE = "dont_show_favourite"; private static final String KEY_DONT_SHOW_FOLLOW = "dont_show_follow"; @@ -237,6 +238,7 @@ import jp.juggler.subwaytooter.util.Utils; boolean dont_close; boolean with_attachment; + boolean with_highlight; boolean dont_show_boost; boolean dont_show_reply; boolean dont_show_favourite; // 通知カラムのみ @@ -332,6 +334,7 @@ import jp.juggler.subwaytooter.util.Utils; item.put( KEY_TYPE, column_type ); item.put( KEY_DONT_CLOSE, dont_close ); item.put( KEY_WITH_ATTACHMENT, with_attachment ); + item.put( KEY_WITH_HIGHLIGHT, with_highlight ); item.put( KEY_DONT_SHOW_BOOST, dont_show_boost ); item.put( KEY_DONT_SHOW_FOLLOW, dont_show_follow ); item.put( KEY_DONT_SHOW_FAVOURITE, dont_show_favourite ); @@ -412,6 +415,7 @@ import jp.juggler.subwaytooter.util.Utils; this.column_type = src.optInt( KEY_TYPE ); this.dont_close = src.optBoolean( KEY_DONT_CLOSE ); this.with_attachment = src.optBoolean( KEY_WITH_ATTACHMENT ); + this.with_highlight = src.optBoolean( KEY_WITH_HIGHLIGHT ); this.dont_show_boost = src.optBoolean( KEY_DONT_SHOW_BOOST ); this.dont_show_follow = src.optBoolean( KEY_DONT_SHOW_FOLLOW ); this.dont_show_favourite = src.optBoolean( KEY_DONT_SHOW_FAVOURITE ); @@ -1163,6 +1167,7 @@ import jp.juggler.subwaytooter.util.Utils; private boolean isFilterEnabled(){ return ( with_attachment + || with_highlight || dont_show_boost || dont_show_favourite || dont_show_follow @@ -1191,11 +1196,19 @@ import jp.juggler.subwaytooter.util.Utils; highlight_trie = HighlightWord.getNameSet(); } + private boolean isFilteredByAttachment(@NonNull TootStatusLike status,@Nullable TootStatusLike reblog){ + // オプションがどれも設定されていないならフィルタしない(false) + if( ! ( with_attachment || with_highlight) ) return false; + + boolean matchMedia = with_attachment && ( reblog != null ? reblog.hasMedia() : status.hasMedia() ); + boolean matchHighlight = with_highlight && ( reblog != null ? reblog.hasHighlight : status.hasHighlight ); + + // どれかの条件を満たすならフィルタしない(false)、どれも満たさないならフィルタする(true) + return ! ( matchMedia || matchHighlight ); + } + private boolean isFiltered( @NonNull TootStatus status ){ - if( with_attachment ){ - boolean hasMedia = status.reblog != null ? status.reblog.hasMedia() : status.hasMedia(); - if( ! hasMedia ) return true; - } + if( isFilteredByAttachment( status ,status.reblog )) return true; if( dont_show_boost ){ if( status.reblog != null ) return true; @@ -1226,10 +1239,7 @@ import jp.juggler.subwaytooter.util.Utils; } private boolean isFiltered( MSPToot status ){ - if( with_attachment ){ - boolean hasMedia = status.hasMedia(); - if( ! hasMedia ) return true; - } + if( isFilteredByAttachment( status ,null )) return true; if( column_regex_filter != null ){ if( column_regex_filter.matcher( status.decoded_content.toString() ).find() ) @@ -1245,10 +1255,7 @@ import jp.juggler.subwaytooter.util.Utils; } private boolean isFiltered( TSToot status ){ - if( with_attachment ){ - boolean hasMedia = status.hasMedia(); - if( ! hasMedia ) return true; - } + if( isFilteredByAttachment( status ,null )) return true; if( column_regex_filter != null ){ if( column_regex_filter.matcher( status.decoded_content.toString() ).find() ) @@ -1640,7 +1647,7 @@ import jp.juggler.subwaytooter.util.Utils; { String s = String.format( Locale.JAPAN, PATH_ACCOUNT_STATUSES, profile_id ); - if( with_attachment ) s = s + "&only_media=1"; + if( with_attachment && !with_highlight ) s = s + "&only_media=1"; if( instance != null && instance.isEnoughVersion( version_1_6 ) ){ getStatusesPinned( client, s + "&pinned=1" ); @@ -2668,7 +2675,7 @@ import jp.juggler.subwaytooter.util.Utils; return client.request( PATH_INSTANCE ); }else{ String s = String.format( Locale.JAPAN, PATH_ACCOUNT_STATUSES, profile_id ); - if( with_attachment ) s = s + "&only_media=1"; + if( with_attachment && !with_highlight ) s = s + "&only_media=1"; return getStatusList( client, s ); } case TAB_FOLLOWING: @@ -3207,7 +3214,7 @@ import jp.juggler.subwaytooter.util.Utils; return client.request( PATH_INSTANCE ); }else{ String s = String.format( Locale.JAPAN, PATH_ACCOUNT_STATUSES, profile_id ); - if( with_attachment ) s = s + "&only_media=1"; + if( with_attachment && !with_highlight ) s = s + "&only_media=1"; return getStatusList( client, s ); } diff --git a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.java b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.java index 91277937..a7938204 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.java +++ b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.java @@ -75,6 +75,7 @@ class ColumnViewHolder private final View llSearch; private final CheckBox cbDontCloseColumn; private final CheckBox cbWithAttachment; + private final CheckBox cbWithHighlight; private final CheckBox cbDontShowBoost; private final CheckBox cbDontShowFollow; private final CheckBox cbDontShowFavourite; @@ -152,6 +153,7 @@ class ColumnViewHolder cbDontCloseColumn = root.findViewById( R.id.cbDontCloseColumn ); cbWithAttachment = root.findViewById( R.id.cbWithAttachment ); + cbWithHighlight = root.findViewById( R.id.cbWithHighlight ); cbDontShowBoost = root.findViewById( R.id.cbDontShowBoost ); cbDontShowFollow = root.findViewById( R.id.cbDontShowFollow ); cbDontShowFavourite = root.findViewById( R.id.cbDontShowFavourite ); @@ -180,6 +182,7 @@ class ColumnViewHolder cbDontCloseColumn.setOnCheckedChangeListener( this ); cbWithAttachment.setOnCheckedChangeListener( this ); + cbWithHighlight.setOnCheckedChangeListener( this ); cbDontShowBoost.setOnCheckedChangeListener( this ); cbDontShowFollow.setOnCheckedChangeListener( this ); cbDontShowFavourite.setOnCheckedChangeListener( this ); @@ -303,6 +306,7 @@ class ColumnViewHolder cbDontCloseColumn.setChecked( column.dont_close ); cbWithAttachment.setChecked( column.with_attachment ); + cbWithHighlight.setChecked( column.with_highlight ); cbDontShowBoost.setChecked( column.dont_show_boost ); cbDontShowFollow.setChecked( column.dont_show_follow ); cbDontShowFavourite.setChecked( column.dont_show_favourite ); @@ -317,6 +321,7 @@ class ColumnViewHolder cbResolve.setChecked( column.search_resolve ); vg( cbWithAttachment, bAllowFilter ); + vg( cbWithHighlight, bAllowFilter ); vg( etRegexFilter, bAllowFilter ); vg( llRegexFilter, bAllowFilter ); @@ -607,6 +612,14 @@ class ColumnViewHolder column.startLoading(); break; + case R.id.cbWithHighlight: + column.with_highlight = isChecked; + activity.app_state.saveColumnList(); + column.startLoading(); + break; + + + case R.id.cbDontShowBoost: column.dont_show_boost = isChecked; activity.app_state.saveColumnList(); diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatusLike.java b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatusLike.java index 0573f9b2..42e3b543 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatusLike.java +++ b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatusLike.java @@ -100,6 +100,8 @@ public abstract class TootStatusLike extends TootId { private static final Pattern reWhitespace = Pattern.compile( "[\\s\\t\\x0d\\x0a]+" ); @Nullable public HighlightWord highlight_sound; + + public boolean hasHighlight; public void setSpoilerText( @NonNull TootParser parser, String sv ){ if( TextUtils.isEmpty( sv ) ){ @@ -118,7 +120,9 @@ public abstract class TootStatusLike extends TootId { ; this.decoded_spoiler_text = options.decodeEmoji( parser.context, sv ); - + + this.hasHighlight = this.hasHighlight || options.hasHighlight; + if( options.highlight_sound != null && this.highlight_sound == null ){ this.highlight_sound = options.highlight_sound; } @@ -140,6 +144,8 @@ public abstract class TootStatusLike extends TootId { this.decoded_content = options.decodeHTML( parser.context, parser.access_info, content ); + this.hasHighlight = this.hasHighlight || options.hasHighlight; + if( options.highlight_sound != null && this.highlight_sound == null ){ this.highlight_sound = options.highlight_sound; } diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.java b/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.java index 477a4b70..66786e79 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.java +++ b/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.java @@ -69,6 +69,7 @@ public class DecodeOptions { // highlight first found @Nullable public HighlightWord highlight_sound; + public boolean hasHighlight; @Nullable public WordTrieTree highlight_trie; public DecodeOptions setHighlightTrie( WordTrieTree highlight_trie ){ diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.java b/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.java index e6647e2a..f91be4e6 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.java +++ b/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.java @@ -47,6 +47,7 @@ public class EmojiDecoder { for( WordTrieTree.Match range : list ){ HighlightWord word = HighlightWord.load( range.word ); if( word !=null ){ + options.hasHighlight = true; sb.setSpan( new HighlightSpan( word.color_fg,word.color_bg ), range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); if( word.sound_type != HighlightWord.SOUND_TYPE_NONE ){ options.highlight_sound = word; diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.java b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.java index 294e0838..c05b7824 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.java +++ b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.java @@ -229,6 +229,7 @@ public class HTMLDecoder { for( WordTrieTree.Match range : list ){ HighlightWord word = HighlightWord.load( range.word ); if( word !=null ){ + options.hasHighlight = true; sb.setSpan( new HighlightSpan( word.color_fg,word.color_bg ), range.start, range.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); if( word.sound_type != HighlightWord.SOUND_TYPE_NONE ){ options.highlight_sound = word; diff --git a/app/src/main/res/layout/page_column.xml b/app/src/main/res/layout/page_column.xml index 5ef758e5..531368f4 100644 --- a/app/src/main/res/layout/page_column.xml +++ b/app/src/main/res/layout/page_column.xml @@ -151,7 +151,12 @@ android:layout_height="wrap_content" android:text="@string/with_attachment" /> - + Veuillez attendre la fin de la dernière opération. Avec pièce(s) jointe(s) + with highlight Ce mot a été interdit! Vos statuts Icone de l\'application créée par フタバ diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 268dbdd6..141be6cd 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,596 +1,595 @@ - + Subway Tooter - + 設定 - + アカウントの追加 - + インスタンス - + メールアドレス - + パスワード - + OK - + キャンセル - + インスタンスを指定してください - + メールを指定してください - + パスワードを指定してください - + 通信エラー - + エラー応答。 - + APIエラー %1$s - + %1$sにこのアプリを登録しています… - + アクセストークンの取得中… - + Acquiring: %1$s %2$s - + 左下のメニューボタンを押してアカウントまたはカラムを追加してください - + ホーム - + ローカルタイムライン - + 連合タイムライン - + アカウント設定からアクセストークンの更新を行ってください - + キャンセルされました - + アカウントの選択 - + アカウントを確認できました - + 返信 - + その他 - + カラムを閉じる - + サムネイル - + 再読み込み - + お気に入り - + 通知 - + 通報 - + あなたの発言 - + %1$s の発言 - + フォロー - + フォロー中 - + フォロワー - + 発言 - + 隠す - + NSFW - + タップで表示 - + 見る - + Tootの送信 - + コンテントワーニング - + アカウントがありません。事前にアカウントの追加を行ってください - + (未選択) - + ここに警告を書いてください - + 投稿の本文をここに入力 - + ステータス - + リストは空です - + 発言者 - + アカウントの選択 - + APIの応答がJSONではありません - + 最大4個までです - + アカウントを選択してください - + ログインに失敗 - + 最大%1$dMBまでです - + 公開 - + 未収載 - + 非公開 - + ダイレクト Webアプリの設定に追従する - 公開範囲の選択 - + この添付データを除去しますか? - + 発言の本文を入力してください - + コンテントワーニングを入力してください - + 直前の操作が完了するまでお待ちください - + お気に入りを外さないとブーストを外せません? - + 確認 - + この発言を %1$s からブーストしますか? 全てのフォロワーとあなたのプロフィールページに公開されます - + %1$sがお気に入りに追加しました - + %1$sがブーストしました - + %1$sからの返信 - + %1$sにフォローされました - + アカウント - + アカウント設定 - + 設定 - + アプリ設定 - + カラム一覧 - + アクセストークンの更新 - + アカウントの削除 - + 操作 - + 発言の公開範囲の既定値 - + ブースト前に確認 - + NSFWな添付データを隠さない - + ユーザ - + アカウントをこのアプリから除去しますか?関連するカラムはすべて除去されます - + ユーザ名が一致しません - + %1$sのアクセストークンを更新しました - + 戻るボタンでカラム一覧を開く - + 先にアカウントの追加を行ってください - + 確認なしでカラムを閉じる - + 並べ替え用のつまみ - + 削除 - + スワイプで削除します。並べ替えと削除は戻るまたは選択した時に反映されます - + 最後に選択した - + %1$d/%2$d - + この発言への返信: - + 添付ファイルがある状態ではアカウントを変更できません - + カラム - + 会話ビュー - + 会話の流れ(id:%1$d) - + インスタンスには\'/\',\'\@\'を含めずに、ホスト名だけを指定してください - + メールアドレスが不十分です。\'@\'や\'.\'がありません - + 例: mastodon.social - + 例: your@e-mail.address - + フォロー解除 - + フォローできました - + フォロー解除できました - + ミュート - + ミュート解除 - + ブロック - + ブロック解除 - + 通報 - + 鍵つきユーザをフォローできません - + ミュート解除できました - + ミュートできました - + ブロック解除できました - + ブロックできました - + 通報する理由を書いてください - + 通報する理由を書いてください - + 通報できました - + この人への発言 - + ハッシュタグ #%1$s - + %1$sから開く - + Webページを開く - + %1$sのWebページを開く - + 検索:%1$s - + 検索 - + 他タンスのアカウントも探す - + \? - + このカラムを閉じますか? - + 別アカウントでフォロー - + 別アカウントでお気に入り - + 別アカウントでブースト - + このアプリについて - + ストアで評価やレビューをお願いします! - + ストアで評価 - + 開発継続のために寄付をお願いします! - + バージョン %1$s - + OSSライセンス - + https://%1$s/ を開く - + 返信 - + %1$d件の通知 - + ブースト - + お気に入り - + アプリを終了 - + 毎回尋ねる - + カラム一覧を開く - + 戻るボタンの動作 - + 添付メディアを開く時に自タンスURLを重視 - + FastScrollerを無効にする(アプリ再起動が必要) - + 削除できました - + 開発者 - + 添付データあり - + 強調表示あり + ギャップを読む - + 別の処理を行っています - + ブロックしたユーザ - + リストの終端 - + ミュートしたユーザ - + テキストをアプリに送る - + Date - + From-Acct - + From-Name - + Content-Warning - + Status-URL - + 保護されたカラムは閉じられません - + 保護(カラムを閉じない) - + 暗い - + 明るい - + UIテーマ(アプリ再起動が必要) - + ブーストを表示しない - + 返信を表示しない - + 正規表現エラー - + 正規表現フィルタ(上級者向け) - + ユーザへの通知データがタンスのサーバから削除されます。よろしいですか? - + 通知の削除 - + %1$s を検索 - + 公開範囲をアカウントの既定値に狭めました - + contributor - + Thanks for %1$s - + 簡略表示(アプリ再起動が必要) - + アプリはミュートされます - + アプリ: %1$s - + ブーストできました ブースト解除しました - + お気に入りにしました お気に入り解除しました - + スワイプで解除。解除した後はカラムをリロードすると再表示されます - + \"%1$s\" アプリをミュート - + ミュートしたアプリ - + %1$s からのフォローリクエストを許可しました - + フォローリクエストの却下 - + フォローリクエストの許可 - + %1$s からのフォローリクエストを却下しました - + フォローリクエスト一覧 - + LED - + 通知オプション - + - + 振動 - + 閉じる - + 疑似アカウントでは利用できません - + 疑似アカウント(ログインなし、公開データを読めるだけ) - + サーバを確認しました - + 保護されたカラムを戻るボタンで確認なしで閉じようとしたらアプリを終了する - + しない - + 添付画像のリサイズ(JPEG,PNG) - + 長辺 %1$d ピクセル - + カメラで撮影 - + 画像を選択 - + 添付メディアをアップロードできました - + 添付メディアのアップロード中です… - + メディアアクセスに必要なアプリ権限がありません - 別アカウントでメッセージを送る - + メッセージを送る - + 別アカウントでプロフを開く - + プロフを開く - + ユーザへのアクション - + 発言へのアクション - + ユーザ \"%1$s\" をブロックします。よろしいですか? - + ユーザ \"%1$s\" をミュートします。よろしいですか? - + この発言を削除します。よろしいですか? - + Acct - + 背景色 - + Color - + 取り消し - + 編集 - + 通称 - + 通称と色 (指定するとAcctの代わりに表示されます) - + プレビュー - + リセット - + 保存 - + 文字色 - + 通称と色と通知音 通称と色 - + 通称と色の変更はカラムをリロードした後に反映されます - + 確認 - + 鍵つきユーザのフォロー - + フォローリクエストを申請しました - + フォローボタンをボタンバーに表示する(アプリ再起動が必要) - + %2$s から鍵付きユーザ %1$s にフォローリクエストを送りますか? - + %2$s で %1$s をフォローしますか? - + %1$s から投稿します。よろしいですか? - + %2$s で %1$s をフォロー解除しますか? - + 次回から確認しない - + フォローリクエストを送信者から解除することはできないようです… - + プロフィール - + %1$s のプロフィール - + あなたです - + 発言をブーストした人 - + 更新しない - + 発言をお気に入りした人 - + 投稿後の更新 - + 更新するがスクロールしない - + 更新して発言までスクロール - + どのアカウントで %1$s を開きますか? - + どのアカウントでブーストしますか? - + どのアカウントでお気に入りしますか? - + どのアカウントでフォローしますか? - + どのアカウントの設定を開きますか? - + どのアカウントでユーザ %1$s のプロフィールを確認しますか? - + どのアカウントでトゥートしますか? - + 会話の流れ - + ハッシュタグ - + QRコードの作成中… - + QRコード - + 消去 - + テキストの消去 - + テキストとメディアの消去 - + 添付メディア - + トゥート - + 公開範囲 - + ユーザ画像を角丸にしない(アプリ再起動が必要) - + 色と背景 - + カラム背景 - + カラムヘッダ - + 文字とアイコンの色 - + 画像 - + 画像の不透明度 - + メニュー - + 疑似アカウント %1$s で開く - + 画像の選択 - + メッセージにハッシュタグが含まれていますが、公開範囲が公開ではありません。ハッシュタグは公開メッセージに含まれる場合のみ検索されることができます。続けてもよろしいですか? - + コピー - + 単語をミュート - + ミュートした単語 - + Web検索 - + 選択してコピー… - + 共有 - + 単語をミュートしました - + クリップボードにコピーしました - + ボタン背景色 - + ボタン前景色 - + フッタの色 - + タブ背景色 - + タブ両端の区切りの色 ステータスを次のアカウントから開く diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a267e4b6..9446cb5a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -158,6 +158,7 @@ Successfully deleted Developer with attachment + with highlight Column is busy Load missing messages Muted users