カラム設定に「強調表示あり」を追加。「添付データあり」とOR動作します

This commit is contained in:
tateisu 2018-01-04 22:56:16 +09:00
parent 0194868dac
commit 812cba406c
12 changed files with 361 additions and 319 deletions

View File

@ -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"
}

View File

@ -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() ); // 末尾の空白はマッチ範囲には含まれない
}
}
}

View File

@ -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 );
}

View File

@ -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();

View File

@ -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;
}

View File

@ -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 ){

View File

@ -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;

View File

@ -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;

View File

@ -151,7 +151,12 @@
android:layout_height="wrap_content"
android:text="@string/with_attachment"
/>
<CheckBox
android:id="@+id/cbWithHighlight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/with_highlight"
/>
<CheckBox
android:id="@+id/cbDontShowBoost"
android:layout_width="match_parent"

View File

@ -318,6 +318,7 @@
<string name="wait_previous_operation">Veuillez attendre la fin de la dernière opération.</string>
<string name="with_attachment">Avec pièce(s) jointe(s)</string>
<string name="with_highlight">with highlight</string>
<string name="word_was_muted">Ce mot a été interdit!</string>
<string name="your_statuses">Vos statuts</string>
<string name="launcher_icon_by">Icone de l\'application créée par フタバ</string>

View File

@ -1,596 +1,595 @@
<resources>
<!---->
<string name="app_name">Subway Tooter</string>
<!---->
<string name="action_settings">設定</string>
<!---->
<string name="account_add">アカウントの追加</string>
<!---->
<string name="instance">インスタンス</string>
<!---->
<string name="user_mail_address">メールアドレス</string>
<!---->
<string name="user_password">パスワード</string>
<!---->
<string name="ok">OK</string>
<!---->
<string name="cancel">キャンセル</string>
<!---->
<string name="instance_not_specified">インスタンスを指定してください</string>
<!---->
<string name="mail_not_specified">メールを指定してください</string>
<!---->
<string name="password_not_specified">パスワードを指定してください</string>
<!---->
<string name="network_error">通信エラー</string>
<!---->
<string name="error_response">エラー応答。</string>
<!---->
<string name="api_error">APIエラー %1$s</string>
<!---->
<string name="register_app_to_server">%1$sにこのアプリを登録しています…</string>
<!---->
<string name="request_access_token">アクセストークンの取得中…</string>
<!---->
<string name="request_api">Acquiring: %1$s %2$s</string>
<!---->
<string name="column_empty">左下のメニューボタンを押してアカウントまたはカラムを追加してください</string>
<!---->
<string name="home">ホーム</string>
<!---->
<string name="local_timeline">ローカルタイムライン</string>
<!---->
<string name="federate_timeline">連合タイムライン</string>
<!---->
<string name="login_required">アカウント設定からアクセストークンの更新を行ってください</string>
<!---->
<string name="cancelled">キャンセルされました</string>
<!---->
<string name="account_pick">アカウントの選択</string>
<!---->
<string name="account_confirmed">アカウントを確認できました</string>
<!---->
<string name="reply">返信</string>
<!---->
<string name="more">その他</string>
<!---->
<string name="close_column">カラムを閉じる</string>
<!---->
<string name="thumbnail">サムネイル</string>
<!---->
<string name="reload">再読み込み</string>
<!---->
<string name="favourites">お気に入り</string>
<!---->
<string name="notifications">通知</string>
<!---->
<string name="reports">通報</string>
<!---->
<string name="your_statuses">あなたの発言</string>
<!---->
<string name="statuses_of">%1$s の発言</string>
<!---->
<string name="follow">フォロー</string>
<!---->
<string name="following">フォロー中</string>
<!---->
<string name="followers">フォロワー</string>
<!---->
<string name="statuses">発言</string>
<!---->
<string name="hide">隠す</string>
<!---->
<string name="nsfw">NSFW</string>
<!---->
<string name="tap_to_show">タップで表示</string>
<!---->
<string name="show">見る</string>
<!---->
<string name="act_post">Tootの送信</string>
<!---->
<string name="content_warning">コンテントワーニング</string>
<!---->
<string name="please_add_account">アカウントがありません。事前にアカウントの追加を行ってください</string>
<!---->
<string name="not_selected">(未選択)</string>
<!---->
<string name="content_warning_hint">ここに警告を書いてください</string>
<!---->
<string name="content_hint">投稿の本文をここに入力</string>
<!---->
<string name="status">ステータス</string>
<!---->
<string name="list_empty">リストは空です</string>
<!---->
<string name="post_from">発言者</string>
<!---->
<string name="choose_account">アカウントの選択</string>
<!---->
<string name="response_not_json">APIの応答がJSONではありません</string>
<!---->
<string name="attachment_too_many">最大4個までです</string>
<!---->
<string name="account_select_please">アカウントを選択してください</string>
<!---->
<string name="login_failed">ログインに失敗</string>
<!---->
<string name="file_size_too_big">最大%1$dMBまでです</string>
<!---->
<string name="visibility_public">公開</string>
<!---->
<string name="visibility_unlisted">未収載</string>
<!---->
<string name="visibility_private">非公開</string>
<!---->
<string name="visibility_direct">ダイレクト</string>
<string name="visibility_web_setting">Webアプリの設定に追従する</string>
<!---->
<string name="choose_visibility">公開範囲の選択</string>
<!---->
<string name="confirm_delete_attachment">この添付データを除去しますか?</string>
<!---->
<string name="post_error_contents_empty">発言の本文を入力してください</string>
<!---->
<string name="post_error_contents_warning_empty">コンテントワーニングを入力してください</string>
<!---->
<string name="wait_previous_operation">直前の操作が完了するまでお待ちください</string>
<!---->
<string name="cant_remove_boost_while_favourited">お気に入りを外さないとブーストを外せません?</string>
<!---->
<string name="confirm">確認</string>
<!---->
<string name="confirm_boost_from">この発言を %1$s からブーストしますか? 全てのフォロワーとあなたのプロフィールページに公開されます</string>
<!---->
<string name="display_name_favourited_by">%1$sがお気に入りに追加しました</string>
<!---->
<string name="display_name_boosted_by">%1$sがブーストしました</string>
<!---->
<string name="display_name_replied_by">%1$sからの返信</string>
<!---->
<string name="display_name_followed_by">%1$sにフォローされました</string>
<!---->
<string name="account">アカウント</string>
<!---->
<string name="account_setting">アカウント設定</string>
<!---->
<string name="setting">設定</string>
<!---->
<string name="app_setting">アプリ設定</string>
<!---->
<string name="column_list">カラム一覧</string>
<!---->
<string name="update_access_token">アクセストークンの更新</string>
<!---->
<string name="account_remove">アカウントの削除</string>
<!---->
<string name="actions">操作</string>
<!---->
<string name="default_status_visibility">発言の公開範囲の既定値</string>
<!---->
<string name="confirm_before_boost">ブースト前に確認</string>
<!---->
<string name="sensitive_content_default_open">NSFWな添付データを隠さない</string>
<!---->
<string name="user">ユーザ</string>
<!---->
<string name="confirm_account_remove">アカウントをこのアプリから除去しますか?関連するカラムはすべて除去されます</string>
<!---->
<string name="user_name_not_match">ユーザ名が一致しません</string>
<!---->
<string name="access_token_updated_for">%1$sのアクセストークンを更新しました</string>
<!---->
<string name="back_to_column_list">戻るボタンでカラム一覧を開く</string>
<!---->
<string name="account_empty">先にアカウントの追加を行ってください</string>
<!---->
<string name="dont_confirm_before_close_column">確認なしでカラムを閉じる</string>
<!---->
<string name="drag_handle">並べ替え用のつまみ</string>
<!---->
<string name="delete">削除</string>
<!---->
<string name="column_list_desc">スワイプで削除します。並べ替えと削除は戻るまたは選択した時に反映されます</string>
<!---->
<string name="last_selection">最後に選択した</string>
<!---->
<string name="column_index">%1$d/%2$d</string>
<!---->
<string name="reply_to_this_status">この発言への返信:</string>
<!---->
<string name="cant_change_account_when_attachment_specified">添付ファイルがある状態ではアカウントを変更できません</string>
<!---->
<string name="column">カラム</string>
<!---->
<string name="conversation_view">会話ビュー</string>
<!---->
<string name="conversation_around">会話の流れ(id:%1$d)</string>
<!---->
<string name="instance_not_need_slash">インスタンスには\'/\',\'\@\'を含めずに、ホスト名だけを指定してください</string>
<!---->
<string name="mail_address_not_contains_at_mark">メールアドレスが不十分です。\'@\'や\'.\'がありません</string>
<!---->
<string name="instance_hint">例: mastodon.social</string>
<!---->
<string name="mail_hint">例: your@e-mail.address</string>
<!---->
<string name="unfollow">フォロー解除</string>
<!---->
<string name="follow_succeeded">フォローできました</string>
<!---->
<string name="unfollow_succeeded">フォロー解除できました</string>
<!---->
<string name="mute">ミュート</string>
<!---->
<string name="unmute">ミュート解除</string>
<!---->
<string name="block">ブロック</string>
<!---->
<string name="unblock">ブロック解除</string>
<!---->
<string name="report">通報</string>
<!---->
<string name="cant_follow_locked_user">鍵つきユーザをフォローできません</string>
<!---->
<string name="unmute_succeeded">ミュート解除できました</string>
<!---->
<string name="mute_succeeded">ミュートできました</string>
<!---->
<string name="unblock_succeeded">ブロック解除できました</string>
<!---->
<string name="block_succeeded">ブロックできました</string>
<!---->
<string name="report_reason">通報する理由を書いてください</string>
<!---->
<string name="comment_empty">通報する理由を書いてください</string>
<!---->
<string name="report_completed">通報できました</string>
<!---->
<string name="mention">この人への発言</string>
<!---->
<string name="hashtag_of">ハッシュタグ #%1$s</string>
<!---->
<string name="open_in_account">%1$sから開く</string>
<!---->
<string name="open_web_page">Webページを開く</string>
<!---->
<string name="open_web_on_host">%1$sのWebページを開く</string>
<!---->
<string name="search_of">検索:%1$s</string>
<!---->
<string name="search">検索</string>
<!---->
<string name="resolve_non_local_account">他タンスのアカウントも探す</string>
<!---->
<string name="question">\?</string>
<!---->
<string name="confirm_close_column">このカラムを閉じますか?</string>
<!---->
<string name="follow_from_another_account">別アカウントでフォロー</string>
<!---->
<string name="favourite_from_another_account">別アカウントでお気に入り</string>
<!---->
<string name="boost_from_another_account">別アカウントでブースト</string>
<!---->
<string name="app_about">このアプリについて</string>
<!---->
<string name="please_rate">ストアで評価やレビューをお願いします!</string>
<!---->
<string name="rate_on_store">ストアで評価</string>
<!---->
<string name="please_donate">開発継続のために寄付をお願いします!</string>
<!---->
<string name="version_is">バージョン %1$s</string>
<!---->
<string name="oss_license">OSSライセンス</string>
<!---->
<string name="open_instance_website">https://%1$s/ を開く</string>
<!---->
<string name="mention2">返信</string>
<!---->
<string name="notification_count">%1$d件の通知</string>
<!---->
<string name="boost">ブースト</string>
<!---->
<string name="favourite">お気に入り</string>
<!---->
<string name="app_exit">アプリを終了</string>
<!---->
<string name="ask_always">毎回尋ねる</string>
<!---->
<string name="open_column_list">カラム一覧を開く</string>
<!---->
<string name="back_button_action">戻るボタンの動作</string>
<!---->
<string name="prior_local_url_when_open_attachment">添付メディアを開く時に自タンスURLを重視</string>
<!---->
<string name="disable_fast_scroller">FastScrollerを無効にする(アプリ再起動が必要)</string>
<!---->
<string name="delete_succeeded">削除できました</string>
<!---->
<string name="developer">開発者</string>
<!---->
<string name="with_attachment">添付データあり</string>
<!---->
<string name="with_highlight">強調表示あり</string>
<string name="read_gap">ギャップを読む</string>
<!---->
<string name="column_is_busy">別の処理を行っています</string>
<!---->
<string name="blocked_users">ブロックしたユーザ</string>
<!---->
<string name="end_of_list">リストの終端</string>
<!---->
<string name="muted_users">ミュートしたユーザ</string>
<!---->
<string name="send_text">テキストをアプリに送る</string>
<!---->
<string name="send_header_date">Date</string>
<!---->
<string name="send_header_from_acct">From-Acct</string>
<!---->
<string name="send_header_from_name">From-Name</string>
<!---->
<string name="send_header_content_warning">Content-Warning</string>
<!---->
<string name="send_header_url">Status-URL</string>
<!---->
<string name="column_has_dont_close_option">保護されたカラムは閉じられません</string>
<!---->
<string name="dont_close_column">保護(カラムを閉じない)</string>
<!---->
<string name="theme_dark">暗い</string>
<!---->
<string name="theme_light">明るい</string>
<!---->
<string name="ui_theme">UIテーマ(アプリ再起動が必要)</string>
<!---->
<string name="dont_show_boost">ブーストを表示しない</string>
<!---->
<string name="dont_show_reply">返信を表示しない</string>
<!---->
<string name="regex_error">正規表現エラー</string>
<!---->
<string name="regex_filter">正規表現フィルタ(上級者向け)</string>
<!---->
<string name="confirm_delete_notification">ユーザへの通知データがタンスのサーバから削除されます。よろしいですか?</string>
<!---->
<string name="notification_delete">通知の削除</string>
<!---->
<string name="search_for">%1$s を検索</string>
<!---->
<string name="spoil_visibility_for_account">公開範囲をアカウントの既定値に狭めました</string>
<!---->
<string name="contributor">contributor</string>
<!---->
<string name="thanks_for">Thanks for %1$s</string>
<!---->
<string name="simple_list">簡略表示(アプリ再起動が必要)</string>
<!---->
<string name="app_was_muted">アプリはミュートされます</string>
<!---->
<string name="application_is">アプリ: %1$s</string>
<!---->
<string name="boost_succeeded">ブーストできました</string>
<string name="unboost_succeeded">ブースト解除しました</string>
<!---->
<string name="favourite_succeeded">お気に入りにしました</string>
<string name="unfavourite_succeeded">お気に入り解除しました</string>
<!---->
<string name="mute_app_desc">スワイプで解除。解除した後はカラムをリロードすると再表示されます</string>
<!---->
<string name="mute_app_of">\"%1$s\" アプリをミュート</string>
<!---->
<string name="muted_app">ミュートしたアプリ</string>
<!---->
<string name="follow_request_authorized">%1$s からのフォローリクエストを許可しました</string>
<!---->
<string name="follow_request_ng">フォローリクエストの却下</string>
<!---->
<string name="follow_request_ok">フォローリクエストの許可</string>
<!---->
<string name="follow_request_rejected">%1$s からのフォローリクエストを却下しました</string>
<!---->
<string name="follow_requests">フォローリクエスト一覧</string>
<!---->
<string name="led">LED</string>
<!---->
<string name="notification_option">通知オプション</string>
<!---->
<string name="sound"></string>
<!---->
<string name="vibration">振動</string>
<!---->
<string name="close">閉じる</string>
<!---->
<string name="not_available_for_pseudo_account">疑似アカウントでは利用できません</string>
<!---->
<string name="pseudo_account">疑似アカウント(ログインなし、公開データを読めるだけ)</string>
<!---->
<string name="server_confirmed">サーバを確認しました</string>
<!---->
<string name="exit_app_when_close_protected_column">保護されたカラムを戻るボタンで確認なしで閉じようとしたらアプリを終了する</string>
<!---->
<string name="dont_resize">しない</string>
<!---->
<string name="resize_image">添付画像のリサイズ(JPEG,PNG)</string>
<!---->
<string name="long_side_pixel">長辺 %1$d ピクセル</string>
<!---->
<string name="image_capture">カメラで撮影</string>
<!---->
<string name="image_pick">画像を選択</string>
<!---->
<string name="attachment_uploaded">添付メディアをアップロードできました</string>
<!---->
<string name="attachment_uploading">添付メディアのアップロード中です…</string>
<!---->
<string name="missing_permission_to_access_media">メディアアクセスに必要なアプリ権限がありません</string>
<!---->
<string name="send_message_from_another_account">別アカウントでメッセージを送る</string>
<!---->
<string name="send_message">メッセージを送る</string>
<!---->
<string name="open_profile_from_another_account">別アカウントでプロフを開く</string>
<!---->
<string name="open_profile">プロフを開く</string>
<!---->
<string name="actions_for_user">ユーザへのアクション</string>
<!---->
<string name="actions_for_status">発言へのアクション</string>
<!---->
<string name="confirm_block_user">ユーザ \"%1$s\" をブロックします。よろしいですか?</string>
<!---->
<string name="confirm_mute_user">ユーザ \"%1$s\" をミュートします。よろしいですか?</string>
<!---->
<string name="confirm_delete_status">この発言を削除します。よろしいですか?</string>
<!---->
<string name="acct">Acct</string>
<!---->
<string name="background_color">背景色</string>
<!---->
<string name="color">Color</string>
<!---->
<string name="discard">取り消し</string>
<!---->
<string name="edit">編集</string>
<!---->
<string name="nickname">通称</string>
<!---->
<string name="nickname_label">通称と色 (指定するとAcctの代わりに表示されます)</string>
<!---->
<string name="preview">プレビュー</string>
<!---->
<string name="reset">リセット</string>
<!---->
<string name="save">保存</string>
<!---->
<string name="text_color">文字色</string>
<!---->
<string name="nickname_and_color_and_notification_sound">通称と色と通知音</string>
<string name="nickname_and_color">通称と色</string>
<!---->
<string name="nickname_applied_after_reload">通称と色の変更はカラムをリロードした後に反映されます</string>
<!---->
<string name="confirmation">確認</string>
<!---->
<string name="follow_locked_user">鍵つきユーザのフォロー</string>
<!---->
<string name="follow_requested">フォローリクエストを申請しました</string>
<!---->
<string name="show_follow_button_in_button_bar">フォローボタンをボタンバーに表示する(アプリ再起動が必要)</string>
<!---->
<string name="confirm_follow_request_who_from">%2$s から鍵付きユーザ %1$s にフォローリクエストを送りますか?</string>
<!---->
<string name="confirm_follow_who_from">%2$s で %1$s をフォローしますか?</string>
<!---->
<string name="confirm_post_from">%1$s から投稿します。よろしいですか?</string>
<!---->
<string name="confirm_unfollow_who_from">%2$s で %1$s をフォロー解除しますか?</string>
<!---->
<string name="dont_confirm_again">次回から確認しない</string>
<!---->
<string name="follow_request_cant_remove_by_sender">フォローリクエストを送信者から解除することはできないようです…</string>
<!---->
<string name="profile">プロフィール</string>
<!---->
<string name="profile_of">%1$s のプロフィール</string>
<!---->
<string name="it_is_you">あなたです</string>
<!---->
<string name="boosted_by">発言をブーストした人</string>
<!---->
<string name="dont_refresh">更新しない</string>
<!---->
<string name="favourited_by">発言をお気に入りした人</string>
<!---->
<string name="refresh_after_toot">投稿後の更新</string>
<!---->
<string name="refresh_no_scroll">更新するがスクロールしない</string>
<!---->
<string name="refresh_scroll_to_toot">更新して発言までスクロール</string>
<!---->
<string name="account_picker_add_timeline_of">どのアカウントで %1$s を開きますか?</string>
<!---->
<string name="account_picker_boost">どのアカウントでブーストしますか?</string>
<!---->
<string name="account_picker_favourite">どのアカウントでお気に入りしますか?</string>
<!---->
<string name="account_picker_follow">どのアカウントでフォローしますか?</string>
<!---->
<string name="account_picker_open_setting">どのアカウントの設定を開きますか?</string>
<!---->
<string name="account_picker_open_user_who">どのアカウントでユーザ %1$s のプロフィールを確認しますか?</string>
<!---->
<string name="account_picker_toot">どのアカウントでトゥートしますか?</string>
<!---->
<string name="conversation">会話の流れ</string>
<!---->
<string name="hashtag">ハッシュタグ</string>
<!---->
<string name="generating_qr_code">QRコードの作成中…</string>
<!---->
<string name="qr_code">QRコード</string>
<!---->
<string name="clear">消去</string>
<!---->
<string name="clear_text">テキストの消去</string>
<!---->
<string name="clear_text_and_media">テキストとメディアの消去</string>
<!---->
<string name="media_attachment">添付メディア</string>
<!---->
<string name="toot">トゥート</string>
<!---->
<string name="visibility">公開範囲</string>
<!---->
<string name="dont_round_avatar">ユーザ画像を角丸にしない(アプリ再起動が必要)</string>
<!---->
<string name="color_and_background">色と背景</string>
<!---->
<string name="column_background">カラム背景</string>
<!---->
<string name="column_header">カラムヘッダ</string>
<!---->
<string name="foreground_color">文字とアイコンの色</string>
<!---->
<string name="image">画像</string>
<!---->
<string name="image_alpha">画像の不透明度</string>
<!---->
<string name="menu">メニュー</string>
<!---->
<string name="open_in_pseudo_account">疑似アカウント %1$s で開く</string>
<!---->
<string name="pick_image">画像の選択</string>
<!---->
<string name="hashtag_and_visibility_not_match">メッセージにハッシュタグが含まれていますが、公開範囲が公開ではありません。ハッシュタグは公開メッセージに含まれる場合のみ検索されることができます。続けてもよろしいですか?</string>
<!---->
<string name="copy">コピー</string>
<!---->
<string name="mute_word">単語をミュート</string>
<!---->
<string name="muted_word">ミュートした単語</string>
<!---->
<string name="search_web">Web検索</string>
<!---->
<string name="select_and_copy">選択してコピー…</string>
<!---->
<string name="send">共有</string>
<!---->
<string name="word_was_muted">単語をミュートしました</string>
<!---->
<string name="copy_complete">クリップボードにコピーしました</string>
<!---->
<string name="button_background_color">ボタン背景色</string>
<!---->
<string name="button_foreground_color">ボタン前景色</string>
<!---->
<string name="footer_color">フッタの色</string>
<!---->
<string name="tab_background_color">タブ背景色</string>
<!---->
<string name="tab_divider_color">タブ両端の区切りの色</string>
<!--ステータスURLをアプリ内で開く時に、どのアカウントから閲覧するかで取得結果が異なる。ログインなしの擬似アカウントも選択肢に含まれる。-->
<string name="open_status_from">ステータスを次のアカウントから開く</string>

View File

@ -158,6 +158,7 @@
<string name="delete_succeeded">Successfully deleted</string>
<string name="developer">Developer</string>
<string name="with_attachment">with attachment</string>
<string name="with_highlight">with highlight</string>
<string name="column_is_busy">Column is busy</string>
<string name="read_gap">Load missing messages</string>
<string name="muted_users">Muted users</string>