v1.1.0: English translation

This commit is contained in:
octospacc 2022-11-17 21:25:19 +01:00
parent 3ac67e3fca
commit 725abcf62f
18 changed files with 214 additions and 211 deletions

View File

@ -1,5 +1,5 @@
simpkey simpkey
Copyright (C) 2020 Xeltica Copyright (C) 2020 Xeltica, 2022 OctoSpacc
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as it under the terms of the GNU Affero General Public License as

View File

@ -2,26 +2,21 @@
**Use misskey without JavaScript 🥴** **Use misskey without JavaScript 🥴**
Simpkey is a HTML-Form based server-side-processing misskey client. _English-translated fork - Original Japanese repo at <https://github.com/EbiseLutica/simpkey>_
It is suitable if you are using a legacy computer, or you are not prefer to enable JavaScript. Simpkey is a HTML-Form based server-side-processing Misskey client.
It is suitable if you're using a legacy computer, or you prefer not to enable JavaScript.
## build ## Usage
``` ```sh
# ??????????? yarn install # Get dependencies
yarn install yarn build # Get
# ???????? yarn start # Finally, run normally
yarn build yarn watch # Finally, run in development status (with hot reload)
# ???????
yarn start
# watch ????????????????????
yarn watch
``` ```
## LICENSE ## LICENSE
[AGPL 3.0](LICENSE) [AGPL 3.0](LICENSE)

View File

@ -1,7 +1,8 @@
export default { export default {
version: '1.0.0', version: '1.1.0',
changelog: [ changelog: [
'きりがなかったので正式リリース', 'Translate the software interface to English.',
'Misskeyにアクセスする際にUserAgentを正しく送るように', 'Official release because there was no end to it.',
'Correctly send UserAgent when accessing Misskey.',
], ],
}; };

View File

@ -7,11 +7,11 @@ import { die } from './die';
export const router = new Router<DefaultState, Context>(); export const router = new Router<DefaultState, Context>();
const staticRouting = [ const staticRouting = [
[ 'about', 'Simpkey について' ], [ 'about', 'About Simpkey' ],
[ 'terms', '利用規約' ], [ 'terms', 'Terms of Use' ],
[ 'privacy-policy', 'プライバシーポリシー' ], [ 'privacy-policy', 'Privacy Policy' ],
[ 'settings', '設定' ], [ 'settings', 'Settings' ],
[ 'help', 'ヘルプ' ], [ 'help', 'Help' ],
]; ];
for (const [ name, title ] of staticRouting) { for (const [ name, title ] of staticRouting) {
@ -46,21 +46,21 @@ router.get('/', async ctx => {
return; return;
} }
await timeline(ctx, host, 'notes/timeline', 'ホームタイムライン', token); await timeline(ctx, host, 'notes/timeline', 'Home Timeline', token);
}); });
router.get('/ltl', async ctx => { router.get('/ltl', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
const meta = await api<any>(host, 'meta', { i: token }); const meta = await api<any>(host, 'meta', { i: token });
if (meta.disableLocalTimeline) { if (meta.disableLocalTimeline) {
await die(ctx, 'ローカルタイムラインは無効化されています'); await die(ctx, 'Local timeline has been disabled');
} else { } else {
await timeline(ctx, host, 'notes/local-timeline', 'ローカルタイムライン', token); await timeline(ctx, host, 'notes/local-timeline', 'Local Timeline', token);
} }
}); });
@ -68,14 +68,14 @@ router.get('/stl', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
const meta = await api<any>(host, 'meta', { i: token }); const meta = await api<any>(host, 'meta', { i: token });
if (meta.disableLocalTimeline) { if (meta.disableLocalTimeline) {
await die(ctx, 'ソーシャルタイムラインは無効化されています'); await die(ctx, 'Social timeline has been disabled');
} else { } else {
await timeline(ctx, host, 'notes/hybrid-timeline', 'ソーシャルタイムライン', token); await timeline(ctx, host, 'notes/hybrid-timeline', 'Social Timeline', token);
} }
}); });
@ -83,15 +83,15 @@ router.get('/gtl', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
const meta = await api<any>(host, 'meta', { i: token }); const meta = await api<any>(host, 'meta', { i: token });
if (meta.disableGlobalTimeline) { if (meta.disableGlobalTimeline) {
await die(ctx, 'グローバルタイムラインは無効化されています'); await die(ctx, 'Global timeline has been disabled');
} else { } else {
await timeline(ctx, host, 'notes/global-timeline', 'グローバルタイムライン', token); await timeline(ctx, host, 'notes/global-timeline', 'Global Timeline', token);
} }
}); });
@ -99,7 +99,7 @@ router.get('/notifications', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -117,7 +117,7 @@ router.get('/renote/:noteId', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -137,7 +137,7 @@ router.get('/reply/:noteId', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -153,7 +153,7 @@ router.get('/react/:noteId', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -174,7 +174,7 @@ router.get('/@:acct', async ctx => {
const token = ctx.cookies.get('i'); const token = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!token || !host) { if (!token || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -201,7 +201,7 @@ router.post('/', async ctx => {
token token
} = ctx.request.body; } = ctx.request.body;
if (!host || !username || !password) { if (!host || !username || !password) {
await die(ctx, 'パラメータが足りません'); await die(ctx, 'Some parameters are missing. Please retry.');
return; return;
} }
try { try {
@ -221,7 +221,7 @@ router.post('/action/:action', async ctx => {
const i = ctx.cookies.get('i'); const i = ctx.cookies.get('i');
const host = ctx.cookies.get('host'); const host = ctx.cookies.get('host');
if (!i || !host) { if (!i || !host) {
await die(ctx, 'ログインしてください'); await die(ctx, 'Please login');
return; return;
} }
@ -242,7 +242,7 @@ router.post('/action/:action', async ctx => {
case 'react': { case 'react': {
const { noteId, reaction, customReaction } = ctx.request.body; const { noteId, reaction, customReaction } = ctx.request.body;
if (!noteId) throw new Error('noteId required'); if (!noteId) throw new Error('noteId required');
if (!reaction) throw new Error('絵文字が指定されていません'); if (!reaction) throw new Error('No emoji was specified');
await api(host, 'notes/reactions/create', { i, noteId, reaction: reaction === 'custom' ? customReaction : reaction }); await api(host, 'notes/reactions/create', { i, noteId, reaction: reaction === 'custom' ? customReaction : reaction });
break; break;
} }
@ -270,5 +270,5 @@ router.post('/logout', ctx => {
// Return 404 for other pages // Return 404 for other pages
router.all('(.*)', async ctx => { router.all('(.*)', async ctx => {
ctx.status = 404; ctx.status = 404;
await die(ctx, 'ページが見つかりませんでした'); await die(ctx, 'Resource not found');
}); });

View File

@ -1,32 +1,32 @@
include _components include _components
html html
head head
meta(charset="UTF-8") meta(charset="UTF-8")
link(href='https://unpkg.com/sanitize.css' rel='stylesheet') link(href='https://unpkg.com/sanitize.css' rel='stylesheet')
meta(name="viewport", content="width=device-width, initial-scale=1.0") meta(name="viewport", content="width=device-width, initial-scale=1.0")
block meta block meta
title= title title= title
style. style.
body { body {
font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif; font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
padding: 16px; padding: 16px;
} }
body body
header header
h1: a(href="/") Simpkey h1: a(href="/") Simpkey
block header block header
main main
block content block content
footer footer
hr hr
div div
a(href="/privacy-policy") プライバシーポリシー a(href="/privacy-policy") Privacy Policy
| ・ | ・
a(href="/terms") 利用規約 a(href="/terms") Terms of Use
| ・ | ・
a(href="/help") ヘルプ a(href="/help") Help
p (C)2020 Xeltica - p (C) 2020 Xeltica, 2022 OctoSpacc ・
a(href="/about") version #{version} a(href="/about") v#{version}
block footer block footer

View File

@ -1,20 +1,21 @@
mixin avatar(user) mixin avatar(user)
img.avatar(src=user.avatarUrl, alt="avatar for " + user.username style="width: 64px; height: 64px; border-radius: 50%")&attributes(attributes) img.avatar(src=user.avatarUrl, alt="Avatar for " + user.username style="width:64px; height:64px; border-radius:50%;")&attributes(attributes)
mixin note-header(note) mixin note-header(note)
header&attributes(attributes) header&attributes(attributes)
a(href="/" + getAcct(note.user)) a(href="/" + getAcct(note.user))
span.name= getUserName(note.user) span.name= getUserName(note.user)
span.acct(style="color: gray")= getAcct(note.user) spamn &nbsp;
span.acct(style="color:gray;")= getAcct(note.user)
if note.user.isAdmin if note.user.isAdmin
span.bot [ADMIN] span.bot [ADMIN]
else if note.user.isModerator else if note.user.isModerator
span.bot [MOD] span.bot [MOD]
if note.user.isBot if note.user.isBot
span.bot [BOT] span.bot [BOT]
if note.user.isCat if note.user.isCat
span.bot [CAT] span.bot [CAT]
mixin sub-note(note) mixin sub-note(note)
.sub-note .sub-note
@ -33,9 +34,11 @@ mixin sub-note(note)
mixin note(note) mixin note(note)
if note.reply if note.reply
+sub-note(note.reply)(style="opacity: 0.5") +sub-note(note.reply)(style="opacity:0.5;")
if note.renote && !note.text if note.renote && !note.text
p: b 🔁 #{getUserName(note.user)} がRenote p
b 🔁 #{getUserName(note.user)}
span renoted
+note(note.renote) +note(note.renote)
else else
.note&attributes(attributes) .note&attributes(attributes)
@ -61,16 +64,16 @@ mixin note(note)
span(class=(key === note.myReaction ? 'my reaction' : 'reaction'))=`${key} ${val}` span(class=(key === note.myReaction ? 'my reaction' : 'reaction'))=`${key} ${val}`
footer footer
|[ |[
a(href="/reply/" + note.id) 返信 #{note.repliesCount} a(href="/reply/" + note.id) #{note.repliesCount} Replies
|] |]
if canRenote && canRenote(note) if canRenote && canRenote(note)
|[ |[
a(href="/renote/" + note.id) リノート #{note.renoteCount} a(href="/renote/" + note.id) #{note.renoteCount} Renotes
|] |]
if canReact && canReact(note) if canReact && canReact(note)
if !note.myReaction if !note.myReaction
| [ | [
a(href="/react/" + note.id) リアクション a(href="/react/" + note.id) React
| ] | ]
else else
form(action="action/unreact", method="post" style="display: inline") form(action="action/unreact", method="post" style="display: inline")
@ -81,61 +84,60 @@ mixin post-form(url, placeholder, buttonText)
form(action=url, method="post") form(action=url, method="post")
div: label div: label
input(type="checkbox", name="useCw") input(type="checkbox", name="useCw")
span CW span CW
input(type="text", name="cw" placeholder="注釈(省略可能)" style="max-width: 100%; min-width: 100%;") input(type="text", name="cw" placeholder="Title/Warning (optional)" style="max-width:100%; min-width:100%;")
textarea(name="text", placeholder=placeholder style="max-width: 100%; min-width: 100%; height: 6em; margin-bottom: 8px") textarea(name="text", placeholder=placeholder style="max-width:100%; min-width:100%; height:6em; margin-bottom:8px;")
div: label 公開範囲: div: label Privacy:
select(name="visibility") select(name="visibility")
option(value="public") パブリック option(value="public") Public
option(value="home") ホーム option(value="home") Home
option(value="followers") フォロワー option(value="followers") Followers
option(value="direct") ダイレクト option(value="direct") Direct
button(type="submit")= buttonText button(type="submit")= buttonText
block block
mixin nav() mixin nav()
div div
|[ |[
a(href="/") ホーム a(href="/") Home
|] [ |] [
a(href="/ltl") ローカル a(href="/ltl") Local
|] [ |] [
a(href="/stl") ソーシャル a(href="/stl") Social
|] [ |] [
a(href="/gtl") グローバル a(href="/gtl") Global
|] [ |] [
a(href="/notifications") 通知 a(href="/notifications") Notifications
|] [ |] [
a(href="/settings") 設定 a(href="/settings") Settings
|] |]
mixin user-header(user, detail = false) mixin user-header(user, detail = false)
if detail if detail
if user.host if user.host
.remote-caution ⚠ リモートのアカウントにつき、情報が正確では無い可能性があります。 .remote-caution ⚠ Information may not be accurate for remote accounts.
a(href=user.url || user.uri, target="_blank", rel="noopener noreferrer") リモートで確認する a(href=user.url || user.uri, target="_blank", rel="noopener noreferrer") Open on remote instance
if user.isSuspended if user.isSuspended
.suspended ⚠ このアカウントは凍結されています .suspended ⚠ This account has been suspended.
if user.isSilenced if user.isSilenced
.silenced ⚠ このアカウントはサイレンスされています .silenced ⚠ This account has been silenced.
+avatar(user) +avatar(user)
.name: b=getUserName(user) .name: b=getUserName(user)
| &nbsp; | &nbsp;
span(style="color: gray")= getAcct(user) span(style="color: gray")= getAcct(user)
if user.isFollowed if user.isFollowed
span.is-followed フォローされています span.is-followed フォローされています
if user.isLocked if user.isLocked
span.lock span.lock
if user.isAdmin if user.isAdmin
span.bot [ADMIN] span.bot [ADMIN]
else if user.isModerator else if user.isModerator
span.bot [MOD] span.bot [MOD]
if user.isBot if user.isBot
span.bot [BOT] span.bot [BOT]
if user.isCat if user.isCat
span.bot [CAT] span.bot [CAT]
if detail if detail
if user.description if user.description
.description !{mfmToHtml(user.description)} .description !{mfmToHtml(user.description)}
@ -144,20 +146,21 @@ mixin user-header(user, detail = false)
if user.location if user.location
.birthday 📍#{user.location} .birthday 📍#{user.location}
if user.sex if user.sex
.sex 性別: #{user.sex} .sex Gender: #{user.sex}
dl dl
each field in user.fields each field in user.fields
dt !{mfmToHtml(field.name)} dt !{mfmToHtml(field.name)}
dd !{mfmToHtml(field.value)} dd !{mfmToHtml(field.value)}
.count .count
a.notes(href="/" + getAcct(user)) #{user.notesCount} ノート |[
| a.notes(href="/" + getAcct(user)) #{user.notesCount} Notes
|]
//- a.following(href="/" + getAcct(user) + "/following") //- a.following(href="/" + getAcct(user) + "/following")
| #{user.followingCount} フォロー | [#{user.followingCount} Following]
| |
//- a.followers(href="/" + getAcct(user) + "/followers") //- a.followers(href="/" + getAcct(user) + "/followers")
| #{user.followersCount} フォロワー | [#{user.followersCount} Followers]
mixin timeline(notes) mixin timeline(notes)
each note in notes each note in notes

View File

@ -1,9 +1,9 @@
extends _base extends _base
block content block content
p Simpkey は、JavaScript のいらない Misskey クライアントです。 p Simpkey is a Misskey client that requires no JavaScript.
p: a(href="https://github.com/xeltica/simpkey", target="_blank", rel="noopener noreferrer") リポジトリを見る p: a(href="https://github.com/andrigamerita/simpkey", target="_blank", rel="noopener noreferrer") Source Code
h2 バージョン #{version} h2 Release v#{version}
ul ul
each val in changelog each val in changelog
li= val li= val

View File

@ -1,6 +1,6 @@
extends _base extends _base
block content block content
h2 エラー h2 Error
p= error || '不明なエラーです' p= error || 'Unknown error'
p: a(href="/") トップページに戻る p: a(href="/") Back to top page

View File

@ -1,27 +1,27 @@
extends _base extends _base
block content block content
h2 ヘルプ h2 Help
p Simpkey を使う上でよく聞かれそうな質問をまとめて回答する、なんとまあえらいページです p This is a great page to answer frequently asked questions about using Simpkey!
h3 タイムラインが止まってる気がする h3 I feel like the timeline is stuck.
p Simpkey はリアルタイムでタイムラインが動きません。投稿やリアクションをしたときのように、ページが再読込されないと最新のタイムラインが表示されないのです。 p Simpkey does not have a real-time timeline. The latest timeline is not displayed until the page is reloaded, like when you make a post or a reaction.
p ホーム ローカル などのボタンを手動で押すことでタイムラインを読み直すことができるはずなのでそれでお願いします。 p You should be able to reload the timeline by manually pressing a button such as home local, so please do that.
span(style="font-size: 0.8em; opacity: 0.4") 昔は手動リロードが当たり前だったんじゃよ(老害) span(style="font-size:0.8em; opacity:0.4") (Manual reloading used to be the norm.)
h3 CW って何? h3 What is CW?
p ノートの本文を隠す機能です。注釈を添えることができるので、ちょっとキツい話をする上での注意書きとか、袋とじとか、一発ギャグとかに使ってください。 p It is a function to hide the body of a note. It can be used to add annotations, so use it for notes on slightly harsh stories, baggage, one-shot gags, and so on.
p なお、注釈欄を埋めても CW のチェックボックスを切っていると適用されないので、くれぐれも確認を忘れないように p Note that even if you fill in the annotation field, it will not be applied if the CW checkbox is unchecked, so please do not forget to check it!
h3 ハッシュタグが「ページが見つかりませんでした」と表示される h3 Hashtags are displayed as "Page not found".
p 未実装なんです。ごめんなさい p It's not implemented yet. Sorry.
h3 ノートの時間の前についている絵文字は何? h3 What is the emoji before the time in the note?
p ノートの公開範囲を表すマークです。それぞれ次のような意味があります。 p These are marks that indicate the extent of the note's publication. They have the following meanings respectively.
ul ul
li 🌐 - パブリック。誰でも見られる公開範囲 li 🌐 - Public. Public range that anyone can see.
li 🏠 - ホーム。投稿主のフォロワーのタイムラインと、自分のユーザーページにのみ表示されます。 li 🏠 - Home. Only visible on the timeline of the poster's followers and on their own user page.
li 🔒 - フォロワー。投稿主のフォロワーのタイムラインにのみ表示されます。 li 🔒 - Followers. Shows only on the timeline of the poster's followers.
li ✉️ - ダイレクト。指定した人のタイムラインにのみ表示されます。つまりあなた宛ということです。 li ✉️ - Direct. Appears only on the timeline of the person you specify. This means it is addressed to you.
li ❓ - 不明。Groundpolis など、特殊仕様の Misskey インスタンスにログインしていると見られるかもしれません。 li ❓ - Unknown; may be seen if you are logged into a specially designed instance of Misskey, such as Groundpolis.
li ☣ - ローカル限定。同じホストの人だけが見られる投稿です。 li ☣️ - Local only. Posts that can only be seen by people on the same host.
h3 Simpkey という名前の由来は? h3 What is the origin of the name Simpkey?
p Simple + Misskey p Simple + Misskey
h3 その他 h3 Other
p その他困ったことがあったら @ebi@misskey.io 宛にメンションで質問すれば答えます p If you have any other problems, you can ask @ebi@misskey.io with a menshion and I'll answer!

View File

@ -1,16 +1,16 @@
extends _base extends _base
block content block content
p Simpkey へようこそ p Welcome to Simpkey
p 使用するインスタンス、ユーザー名、パスワードを入力して、今すぐ始めましょう。 p To get started, enter your login data.
form(action="/", method="post") form(action="/", method="post")
div: label インスタンス名: div: label Instance Domain:
input(type="text", name="host", placeholder="例: misskey.io") input(type="text", name="host", placeholder="例: misskey.io")
div: label ユーザー名: div: label Username:
input(type="text", name="username") input(type="text", name="username")
div: label パスワード: div: label Password:
input(type="password", name="password") input(type="password", name="password")
div: label 2段階認証コード (必要なら): div: label 2FA Code (if needed):
input(type="text", name="token") input(type="text", name="token")
p ログインする前に下部の「利用規約」「プライバシーポリシー」「ヘルプ」には目を通しておいてください。 p Before logging in, please read the "Terms of Use", "Privacy Policy", and "Help" at the bottom.
button(type="submit") ログイン button(type="submit") Login!

View File

@ -4,21 +4,25 @@ block header
+nav +nav
block content block content
h2 通知 h2 Notifications
.notifications .notifications
each val in notifications each val in notifications
.notification .notification
hr hr
case val.type case val.type
when 'follow' when 'follow'
p #{getUserName(val.user)} さんにフォローされました p
b #{getUserName(val.user)}
span is following you
when 'mention' when 'mention'
when 'reply' when 'reply'
when 'renote' when 'renote'
when 'quote' when 'quote'
+note(val.note) +note(val.note)
when 'reaction' when 'reaction'
p #{getUserName(val.user)} さんが #{val.reaction} とリアクションしました p
b #{getUserName(val.user)}
span reacted with #{val.reaction}
+sub-note(val.note) +sub-note(val.note)
when 'pollVote' when 'pollVote'
p #{getUserName(val.user)} さんが投票しました p #{getUserName(val.user)} さんが投票しました
@ -30,4 +34,4 @@ block content
when 'groupInvited' when 'groupInvited'
when 'app' when 'app'
default default
p #{val.type} 通知(未実装) p #{val.type} Notification (not yet implemented)

View File

@ -1,20 +1,20 @@
extends _base extends _base
block content block content
h2 プライバシーポリシー h2 Privacy Policy
p 本サイトのプライバシーポリシーを以下に示します。本サイトのサービスをご利用いただいた時点で、自動的にポリシーに同意したものとみなされます。 p The following is the privacy policy for this site. By using this site's services, you automatically agree to the policy.
h3 個人情報の利用目的 h3 Purpose of Use of Personal Information
p 本サイトでは、対象とする Misskey インスタンスにログインする際にユーザー名およびパスワードを入力する必要があります。 p The Site requires you to enter your user name and password when you log in to your target instance of Misskey.
p これらの情報は対象の Misskey インスタンスにログインするためだけに使用されます。本サイト自体は、ユーザーの入力したユーザー名・パスワードを一切収集致しません。 p This information is only used to log in to the applicable instance of Misskey. The Site itself does not collect any username/password entered by the user.
p また、本サイトではユーザーの IP アドレスを収集しています。収集された IP アドレスは、利用規約への違反を行ったユーザーの特定および処分の為に使用されます。 p The site also collects the user's IP address. The IP addresses collected are used to identify and take action against users who violate the Terms of Use.
h3 個人情報の第三者への開示 h3 Disclosure of Personal Information to Third Parties
p 悪質な違反行為を行ったユーザーに対する処罰の一環としてプロバイダーへの通報を行う場合や、法令に基づく要請がある場合を除き、収集した個人情報を外部に開示することはありません。また、個人情報の取扱を第三者に委託することもありません。 p Personal information collected will not be disclosed to outside parties, except when reporting malicious violations to providers as part of the punishment of users who have committed such violations, or when required by law. We also do not outsource the handling of personal information to third parties.
h3 免責事項 h3 Disclaimer
p 本サイトを通じてアクセスする Misskey インスタンスにつきましては、本プライバシーポリシーは適用されません。別途、当該インスタンスのプライバシーポリシーをご確認頂く必要があります。本サイトでは、アクセス先のインスタンスにて取り扱われる個人情報については一切の責任を負いません。 p This Privacy Policy does not apply to Misskey instances accessed through the Site. You should separately review the privacy policy of the instance in question. This site is not responsible for any personal information handled by the instances accessed through this site.
h3 変更について h3 Changes
p 当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。 p This site will comply with Japanese laws and regulations applicable to personal information, and will review and improve the contents of this policy from time to time.
p 修正された最新のプライバシーポリシーは常に本ページにて開示されます。 p The latest privacy policy as amended will always be disclosed on this page.

View File

@ -1,20 +1,20 @@
extends _base extends _base
block content block content
if canReact if canReact
h2 このノートにリアクションを押しますか? h2 Want to react to this note?
+sub-note(note) +sub-note(note)
form(action="/action/react", method="post") form(action="/action/react", method="post")
each val in reactions each val in reactions
div: label div: label
input(type="radio", name="reaction" value=val) input(type="radio", name="reaction" value=val)
!= val != val
div: label div: label
input(type="radio", name="reaction", value="custom") input(type="radio", name="reaction", value="custom")
input(type="text", name="customReaction") input(type="text", name="customReaction")
input(type="hidden", name="noteId", value=note.id) input(type="hidden", name="noteId", value=note.id)
button(type="submit") リアクションを押す button(type="submit") React!
else else
h2 このノートにはリアクションできません h2 Can't react to this note
+sub-note(note) +sub-note(note)

View File

@ -2,10 +2,10 @@ extends _base
block content block content
if canRenote if canRenote
h2 このノートをリノートしますか? h2 Want to renote this note?
+sub-note(note) +sub-note(note)
+post-form('/action/create-note', "コメント(省略可能)", "リノート") +post-form('/action/create-note', "Comment (optional)", "Renote")
input(type="hidden", name="renoteId", value=note.id) input(type="hidden", name="renoteId", value=note.id)
else else
h2 このノートはリノートできません h2 This note can't be renoted
+sub-note(note) +sub-note(note)

View File

@ -1,7 +1,7 @@
extends _base extends _base
block content block content
h2 このノートに返信しますか? h2 Want to reply to this note?
+sub-note(note) +sub-note(note)
+post-form('/action/create-note', "何と返そうか?", "返信") +post-form('/action/create-note', "What to reply with?", "Reply")
input(type="hidden", name="replyId", value=note.id) input(type="hidden", name="replyId", value=note.id)

View File

@ -1,10 +1,10 @@
extends _base extends _base
block header block header
+nav +nav
block content block content
h2 設定 h2 Settings
h3 ユーザー h3 User
form(action="/logout", method="post") form(action="/logout", method="post")
button(type="submit") ログアウト button(type="submit") Logout

View File

@ -1,14 +1,14 @@
extends _base extends _base
block content block content
h2 利用規約 h2 Terms of Use
p 本サイトの利用規約を以下に示します。本サイトのサービスをご利用いただいた時点で、自動的に本規約に同意したものとみなされます。 p The following are the Terms of Use for this site. By using the services on this site, you automatically agree to these terms and conditions.
h3 禁止行為 h3 Prohibited acts
p 以下に定める行為は固く禁じます。 p The following acts are strictly prohibited.
ul ul
li サーバーに意図的に過大な負荷を掛ける行為 li Intentionally overloading the server
li サーバーソフトウェアの脆弱性を意図的に突くことによって不正なデータを生成したり、システムの一部または全部を使用できなくするといった迷惑行為 li Unsolicited acts such as intentionally exploiting server software vulnerabilities to generate unauthorized data or disable part or all of the system
li 接続先のサーバーの利用規約に反する行為 li Actions that violate the terms of service of the server to which the user is connecting.
li その他、運営が不適切と認める行為 li Other acts deemed inappropriate by the management
p 利用規約に反した場合、お使いのIPアドレスからのアクセスを禁止、悪質であればプロバイダーへの通報を行います。 p If you violate the Terms of Service, we will prohibit access from your IP address, and if it is malicious, we will report you to your provider.

View File

@ -5,7 +5,7 @@ block header
block content block content
+user-header(user) +user-header(user)
+post-form("/action/create-note", "今なにしてる?", "ノート") +post-form("/action/create-note", "What's on your mind?", "Note")
hr hr
h2= timelineName h2= timelineName
+timeline(notes) +timeline(notes)