Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0

Merge branch 'master' of github.com:ewhal/nyaa into api

Cette révision appartient à :
ayame-git 2017-05-11 14:38:46 +03:00
révision 51c5f198b4
16 fichiers modifiés avec 334 ajouts et 173 suppressions

Voir le fichier

@ -64,15 +64,9 @@ Access the website by going to [localhost:9999](http://localhost:9999).
> nyaa_psql.backup.
## TODO
## High priority
* Torrent data scraping from definable tracker (We have a tracker that the owner is ok for us to scrape from)
* seeds/leeachers
* file lists
* Downloads
* Accounts and Registration System(WIP)
* blocking upload of torrent hashes
## Lower priority
* improve scraping
* fix up cache bug
* import sukebei torrents into db/work on sukebei
* Get code up to standard of go lint recommendations
* Write tests
* fix sukebei categories

Voir le fichier

@ -117,10 +117,10 @@ func (t *Torrent) ToJSON() TorrentJSON {
magnet := util.InfoHashToMagnet(strings.TrimSpace(t.Hash), t.Name, config.Trackers...)
commentsJSON := make([]CommentJSON, 0, len(t.OldComments)+len(t.Comments))
for _, c := range t.OldComments {
commentsJSON = append(commentsJSON, CommentJSON{Username: c.Username, UserID: -1, Content: template.HTML(c.Content), Date: c.Date})
commentsJSON = append(commentsJSON, CommentJSON{Username: c.Username, UserID: -1, Content: template.HTML(c.Content), Date: c.Date.UTC()})
}
for _, c := range t.Comments {
commentsJSON = append(commentsJSON, CommentJSON{Username: c.User.Username, UserID: int(c.User.ID), Content: util.MarkdownToHTML(c.Content), Date: c.CreatedAt})
commentsJSON = append(commentsJSON, CommentJSON{Username: c.User.Username, UserID: int(c.User.ID), Content: util.MarkdownToHTML(c.Content), Date: c.CreatedAt.UTC()})
}
uploader := ""
if t.Uploader != nil {
@ -130,7 +130,8 @@ func (t *Torrent) ToJSON() TorrentJSON {
if t.ID <= config.LastOldTorrentID && len(config.TorrentCacheLink) > 0 {
torrentlink = fmt.Sprintf(config.TorrentCacheLink, t.Hash)
} else if t.ID > config.LastOldTorrentID && len(config.TorrentStorageLink) > 0 {
torrentlink = fmt.Sprintf(config.TorrentStorageLink, t.Hash) // TODO: Fix as part of configuration changes
// TODO: Fix as part of configuration changes (fix what?)
torrentlink = fmt.Sprintf(config.TorrentStorageLink, t.Hash)
}
res := TorrentJSON{
ID: strconv.FormatUint(uint64(t.ID), 10),

Voir le fichier

@ -377,4 +377,9 @@ footer {
position: relative;
top: -0.5rem;
float: right;
}
}
.comment-date {
font-size: smaller;
width: auto; /* Undo bootstrap's fixed width */
}

Voir le fichier

@ -62,6 +62,7 @@ var FuncMap = template.FuncMap{
return template.HTML(ret)
},
"T": i18n.IdentityTfunc,
"Ts": i18n.IdentityTfunc,
"getAvatar": func(hash string, size int) string {
return "https://www.gravatar.com/avatar/" + hash + "?s=" + strconv.Itoa(size)
},

Voir le fichier

@ -157,6 +157,11 @@ func UserProfileFormHandler(w http.ResponseWriter, r *http.Request) {
modelHelper.BindValueForm(&b, r)
if !userPermission.HasAdmin(currentUser) {
b.Username = currentUser.Username
b.Status = currentUser.Status
} else {
if b.Status == 2 {
err["errors"] = append(err["errors"], "Elevating status to moderator is prohibited")
}
}
err = modelHelper.ValidateForm(&b, err)
if len(err) == 0 {

Voir le fichier

@ -16,24 +16,6 @@ var cookieHandler = securecookie.New(
securecookie.GenerateRandomKey(64),
securecookie.GenerateRandomKey(32))
// TODO: Figure out what this is about before I delete it
// // UserName get username from a cookie.
// func UserName(c *gin.Context) (string, error) {
// var userName string
// request := c.Request
// cookie, err := request.Cookie("session")
// if err != nil {
// return userName, err
// }
// cookieValue := make(map[string]string)
// err = cookieHandler.Decode("session", cookie.Value, &cookieValue)
// if err != nil {
// return userName, err
// }
// userName = cookieValue["name"]
// return userName, nil
// }
func Token(r *http.Request) (string, error) {
var token string
cookie, err := r.Cookie("session")
@ -90,17 +72,20 @@ func SetCookieHandler(w http.ResponseWriter, email string, pass string) (int, er
if isValidEmail {
log.Debug("User entered valid email.")
if db.ORM.Where("email = ?", email).First(&user).RecordNotFound() {
return http.StatusNotFound, errors.New("user not found")
return http.StatusNotFound, errors.New("User not found")
}
} else {
log.Debug("User entered username.")
if db.ORM.Where("username = ?", email).First(&user).RecordNotFound() {
return http.StatusNotFound, errors.New("user not found")
return http.StatusNotFound, errors.New("User not found")
}
}
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(pass))
if err != nil {
return http.StatusUnauthorized, errors.New("password incorrect")
return http.StatusUnauthorized, errors.New("Password incorrect")
}
if user.Status == -1 {
return http.StatusUnauthorized, errors.New("Account banned")
}
status, err := SetCookie(w, user.Token)
if err != nil {

Voir le fichier

@ -34,7 +34,7 @@
{{end}}
</div>
</div>
{{ if not (HasAdmin .)}}
{{ if not (HasAdmin $.User)}}
<div class="form-group">
<label class="col-md-3 control-label">{{ T "current_password"}}:</label>
<div class="col-md-8">
@ -63,7 +63,7 @@
{{end}}
</div>
</div>
{{ if HasAdmin .}}
{{ if HasAdmin $.User}}
<h3>{{ T "moderation"}}</h3>
<div class="form-group">
<label class="col-md-3 control-label">{{ T "username"}}:</label>
@ -82,7 +82,7 @@
<option value="-1" {{ if eq .Status -1 }}selected{{end}}>{{ T "banned"}}</option>
<option value="0" {{ if eq .Status 0 }}selected{{end}}>{{ T "member"}} ({{ T "default" }})</option>
<option value="1" {{ if eq .Status 1 }}selected{{end}}>{{ T "trusted_member"}} </option>
<option value="2" {{ if eq .Status 2 }}selected{{end}}>{{ T "moderator"}} </option>
<!-- <option value="2" {{ if eq .Status 2 }}selected{{end}}>{{ T "moderator"}} </option> -->
</select>
</div>
{{ range (index $.FormErrors "status")}}

Voir le fichier

@ -93,8 +93,11 @@
<a href="{{$.URL.Parse (printf "/user/%d/-" .UserID ) }}">{{.Username}}</a>
{{end}}
</div>
<div class="col-md-2">
{{.Date.Year}}/{{.Date.Month}}/{{.Date.Day}}
<div class="col-md-1 date-short comment-date">
{{ .Date.Format ( Ts "date_format" ) }}
{{/* output: "2017-05-01 15:30"
Went with "Year-Month-Day" because it's the most unambiguous.
If you want it to be determined by where you're from, be my guest. */}}
</div>
<div class="col-md-8">
{{.Content}}

Voir le fichier

@ -602,5 +602,9 @@
{
"id": "profile_edit_page",
"translation": "Edit %s's profile"
},
{
"id":"date_format",
"translation": "2006-01-02 15:04"
}
]

Voir le fichier

@ -586,5 +586,25 @@
{
"id": "email_changed",
"translation": "L'adresse email a été modifiée avec succès ! Confirmez le changement en cliquant sur le lien envoyé à : %s"
},
{
"id": "torrent_status",
"translation": "Statut du torrent"
},
{
"id": "torrent_status_hidden",
"translation": "Invisible"
},
{
"id": "torrent_status_normal",
"translation": "Normal"
},
{
"id": "torrent_status_remake",
"translation": "Remake"
},
{
"id": "profile_edit_page",
"translation": "Éditer le profil de %s"
}
]

Voir le fichier

@ -578,5 +578,29 @@
{
"id": "mark_as_remake",
"translation": "Segnala come remake"
}
},
{
"id": "email_changed",
"translation": "Email cambiata con successo! Dovrai, tuttavia, per confermare cliccare il link mandato a: %s"
},
{
"id": "torrent_status",
"translation": "Torrent status"
},
{
"id": "torrent_status_hidden",
"translation": "Nascosto"
},
{
"id": "torrent_status_normal",
"translation": "Normale"
},
{
"id": "torrent_status_remake",
"translation": "Remake"
},
{
"id": "profile_edit_page",
"translation": "Modifica il profilo di %s"
}
]

Voir le fichier

@ -5,27 +5,27 @@
},
{
"id": "verify_email_title",
"translation": "Nyaapantsuのメールアドレスを確認してください。"
"translation": "【Nyaapantsu】メールアドレスの認証"
},
{
"id": "verify_email_content",
"translation": "あなたのメールアドレスを確認するため、下のリンクにクリックしてください。"
"translation": "あなたのメールアドレスを認証するには、以下のリンクをクリックします。"
},
{
"id": "reset_password_title",
"translation": "Nyaapantsuのパスワードを再設定する"
"translation": "【Nyaapantsu】パスワードのリセット"
},
{
"id": "reset_password_content",
"translation": "パスワードを再設定するため、下のリンクにクリックしてください。"
"translation": "パスワードをリセットするには、以下のリンクをクリックします。"
},
{
"id":"register_title",
"translation": "新しいアカウントを作成している"
"translation": "新しいアカウントの作成"
},
{
"id":"signup_box_title",
"translation": "サインアップしてください。<small>いつまでも無料だ</small>"
"translation": "登録しましょう。<small>ずっと無料です</small>"
},
{
"id":"username",
@ -53,15 +53,15 @@
},
{
"id":"terms_conditions_confirm",
"translation": "<strong class=\"label label-primary\">登録する</strong> をクリックすることにより、Cookieの使用を含む、本サイトで規定されている <a href=\"#\" data-toggle=\"modal\" data-target=\"#t_and_c_m\"> 利用規約</a>に同意するものとします。"
"translation": "<strong class=\"label label-primary\">登録する</strong> をクリックすることにより、Cookie の使用を含む、本サイトで規定されている <a href=\"#\" data-toggle=\"modal\" data-target=\"#t_and_c_m\"> 利用規約</a> に同意するものとします。"
},
{
"id":"signin",
"translation": "サインイン"
"translation": "ログイン"
},
{
"id":"register",
"translation": "登録する"
"translation": "登録"
},
{
"id":"terms_conditions",
@ -69,43 +69,43 @@
},
{
"id":"terms_conditions_full",
"translation": "いくらかのゴミ"
"translation": "ダミー"
},
{
"id":"remember_me",
"translation": "俺を覚え"
"translation": "ログイン情報を記憶"
},
{
"id":"forgot_password",
"translation": "パスワードを忘れた"
"translation": "パスワードをお忘れですか"
},
{
"id":"sign_in_box_title",
"translation": "サインインしてください"
"translation": "ログインします"
},
{
"id":"sign_in_title",
"translation": "サインイン"
"translation": "ログイン"
},
{
"id":"register_success_title",
"translation": "サインアップは成功"
"translation": "登録完了"
},
{
"id":"sign_up_success",
"translation": "登録ありがとうございました!"
"translation": "ご登録いただきありがとうございます。"
},
{
"id":"verify_success",
"translation": "<i style=\"color:limegreen\" class=\"glyphicon glyphicon-ok-circle\"></i>アカウントは有効になっています"
"translation": "<i style=\"color:limegreen\" class=\"glyphicon glyphicon-ok-circle\"></i>アカウントは有効になっています"
},
{
"id":"signup_verification_email",
"translation": "最後に、メールインボックスと迷惑メールに確認メールをチェックしてください。"
"translation": "認証メールを送信しました。メールボックスを確認してください。迷惑メールフォルダーの確認もお忘れずに。"
},
{
"id":"signup_verification_noemail",
"translation": "登録は成功でした。今、あなたのアカウントを使うことができます。"
"translation": "認証が完了しました。今からこのアカウントを使うことができます。"
},
{
"id":"settings",
@ -113,11 +113,11 @@
},
{
"id":"torrents",
"translation": "トレント"
"translation": "Torrent"
},
{
"id":"follow",
"translation": "フォローする"
"translation": "フォロー"
},
{
"id":"profile_page",
@ -125,7 +125,7 @@
},
{
"id":"see_more_torrents_from",
"translation": "%s からもっとトレントを見る"
"translation": "%s の Torrent をもっと見る"
},
{
"id":"category",
@ -149,15 +149,15 @@
},
{
"id": "home",
"translation": "ホームページ"
"translation": "ホーム"
},
{
"id": "error_404",
"translation": "エラー"
"translation": "404 エラー"
},
{
"id": "toggle_navigation",
"translation": "ナビをトグルする"
"translation": "ナビゲーションの切り替え"
},
{
"id": "upload",
@ -169,23 +169,23 @@
},
{
"id": "fap",
"translation": "オナニー"
"translation": "えっち"
},
{
"id": "advanced_search",
"translation": "高度なサーチ"
"translation": "高度な検索"
},
{
"id": "nothing_here",
"translation": "ここには何もない。"
"translation": "何もありません"
},
{
"id": "404_not_found",
"translation": "見つかりません"
"translation": "404 見つかりません"
},
{
"id": "no_torrents_uploaded",
"translation": "トレントはまだアップロードされていません!"
"translation": "まだ Torrent がアップロードされていません。"
},
{
"id": "profile",
@ -193,7 +193,7 @@
},
{
"id": "sign_out",
"translation": "サインアウト"
"translation": "ログアウト"
},
{
"id": "member",
@ -201,147 +201,147 @@
},
{
"id": "sign_in",
"translation": "サインイン"
"translation": "ログイン"
},
{
"id": "sign_up",
"translation": "サインアップ"
"translation": "登録"
},
{
"id": "no_results_found",
"translation": "結果が見つかれません"
"translation": "結果が見つかりませんでした"
},
{
"id": "notice_keep_seeding",
"translation": "掲示シードするを続けるやDHTを可能にする、馬鹿野郎"
"translation": "お願いDHT 機能を有効にし、なるべくシードを継続してください"
},
{
"id": "official_nyaapocalipse_faq",
"translation": "公式のニャーポカリプスのよくある質問"
"translation": "nyaa.se の閉鎖についてよくある質問"
},
{
"id": "links_replacement_mirror",
"translation": "置換/ミラーへのリンク"
"translation": "nyaa.se のミラーリンク"
},
{
"id": "what_happened",
"translation": "置換/ミラーへのリンク"
"translation": "なにが起こったの?"
},
{
"id": "nyaa_se_went_offline",
"translation": "nyaa.seと関連ドメインnyaatorrents.infoなどは2017年5月1日にオフラインになりました。"
"translation": "nyaa.se とその関連ドメイン (nyaatorrents.infoなど) は 2017年5月1日 にオフラインになった。"
},
{
"id": "its_not_a_ddos",
"translation": "それは非アクティブ化されたので、それは通常のようにDDoS攻撃ではありません。"
"translation": "以前のような DDoS 攻撃ではなく、ドメインが利用停止になった。"
},
{
"id": "future_not_looking_good",
"translation": "ニャーの将来の見通しは良くないそうです。(それは死んでいる)"
"translation": "nyaa.se の将来が危うい。(現に死んでるし)"
},
{
"id": "recovery_effort",
"translation": "回復努力がしている。"
"translation": "復旧に努力を注いでいるところ。"
},
{
"id": "is_everything_lost",
"translation": "すべてが失われていますか"
"translation": "nyaa.se のすべてが失われてしまったの"
},
{
"id": "in_short_no",
"translation": "要するに、いいえ。"
"translation": "いいえ。"
},
{
"id": "are_some_things_lost",
"translation": "何かが失われていますか"
"translation": "でも、いくつか失われた"
},
{
"id": "answer_is_nyaa_db_lost",
"translation": "我々は<s>4月5日</s>5月1日までニャーの急流のデータベースがあります。ほとんど何も失われないことを意味します。"
"translation": "<s>4月5日</s> 5月1日までの nyaa.se のデータベースはあります。要するに、ほとんど失われていません。"
},
{
"id": "answer_is_sukebei_db_lost",
"translation": "しかし、スケベイの調子が悪いかもしれません。今、我々は2016年までのスケベイデータベースしかありませんが、より新しいデータベースが利用可能かもしれません。"
"translation": "ただし sukebei は別です。sukebei に至っては 2016年までのデータベースしか手元にありません。ただ、今後新しいデータベースが使える可能性はあります。"
},
{
"id": "how_are_we_recovering",
"translation": "起死回生するために我々は何していますか"
"translation": "どのように復旧させるの"
},
{
"id": "answer_how_are_we_recovering",
"translation": "データベースはnyaa.pantsu.catとsukebei.pantsu.catでホストされています。検索機能があります。ほとんど完全なニャー機能性はカミングスーンはずです、乞うご期待。シード/リーチャー統計は掻き取りによって可能であり、将来いつか復元される可能性があります。他の機能は現在優先されています。"
"translation": "上述のデータベースは nyaa.pantsu.cat と sukebei.pantsu.cat にホストされています。検索機能はすでにあり、nyaa.se にあったほぼすべての機能が近いうちに利用可能になるでしょう。また、Seeder / Leecher 統計はスクレイピングによって収集可能ですが、今は他に優先すべきことがあるため後回しにされます。"
},
{
"id": "are_the_trackers_working",
"translation": "トレントはまだ機能していますか"
"translation": "Torrent ファイルはまだ利用できる"
},
{
"id": "answer_are_the_trackers_working",
"translation": "トラッカーがダウンしていても、シーダーはまだ分散型DHTネットワークに接続されています。ファイルがDHTネットワーク上にリストされている限り、すべてが正常はずです。"
"translation": "トラッカーがダウンしたとしても、シーダーはまだ DHT ネットワークに接続しているはずです。ファイルが DHT ネットワーク上にリスティングされてさえいれば、いつも通り利用できます。"
},
{
"id": "how_do_i_download_the_torrents",
"translation": "どのように俺はトレントをダウンロードするのですか"
"translation": "どうやって Torrent ファイルをダウンロードすればいいの"
},
{
"id": "answer_how_do_i_download_the_torrents",
"translation": "<b>マグネットリンク</b> を使って。トレントクライアントがDHTネットワーク上のファイルを見つけるためにマグネットリンクを使います。正しくダウンロードするはずです。"
"translation": "<b>magnet リンク</b> をご利用ください。magnet リンクは BitTorrent クライアントが DHT ネットワーク上のファイルを見つけるのに利用されます。もちろんいつも通りダウンロードすることができます。"
},
{
"id": "magnet_link_should_look_like",
"translation": "マグネットリンクはこのように見えるはずです:"
"translation": "magnet リンクは次のようになっているはずです:"
},
{
"id": "which_trackers_do_you_recommend",
"translation": "どのトラッカーがすすめですか"
"translation": "どのトラッカーがすすめ?"
},
{
"id": "answer_which_trackers_do_you_recommend",
"translation": "トレントアップロードがトラッカーのために拒否されたなら、これらのいくつかを追加する必要があります:"
"translation": "トラッカーに Torrent のアップロードを拒否された場合は、この中のいくつかを追加する必要があります:"
},
{
"id": "how_can_i_help",
"translation": "手伝いしましょうか"
"translation": "なにか手伝えることはある"
},
{
"id": "answer_how_can_i_help",
"translation": "Webプログラミングの専門知識があれば、irc.rizon.netの#nyaapantsu IRCチャンネルに参加できます。現在のデータベースがあれば、特にsukebeiのデータベース、<b>それらをアップロードしろ。</b>"
"translation": "ウェブ開発の経験があるのであれば、irc.rizon.net の #nyaapantsu IRC チャンネルに参加することができますよ。現在のデータベースがあるのなら、特に sukebei の方ですが、<b>ぜひともアップロードしていただきたいです。</b>"
},
{
"id": "your_design_sucks_found_a_bug",
"translation": "貴様のでサインはくそ/バグを見つけた"
"translation": "なんだこのサイトデザイン!? / バグを見つけたよ"
},
{
"id": "why_written_in_go",
"translation": "なぜすべてが Goで書かれているの?"
"translation": "なんで Go で書いてるの?"
},
{
"id": "authors_favorite_language",
"translation": "作者の一番好きなプログラミング言語です。"
"translation": "作者の一番好きなプログラミング言語だからです。"
},
{
"id": "nyaa_pantsu_dont_host_files",
"translation": " nyaa.pantsu.catとsukebei.pantsu.catはファイルをホストしません。"
"translation": " nyaa.pantsu.cat と sukebei.pantsu.cat はいかなるファイルもホストしていません。"
},
{
"id": "upload_magnet",
"translation": "マグネットをアップロードする"
"translation": "magnet リンクのアップロード"
},
{
"id": "torrent_file",
"translation": "トレントファイル"
"translation": "Torrent ファイル"
},
{
"id": "uploading_file_prefills_fields",
"translation": "トレントをアップロードするといくつかのフィールドを事前に入力できます。そうすることをすすめします。"
"translation": "Torrent ファイルをアップロードしている間にいくつかの項目を入力できます。そうすることをおすすめします。"
},
{
"id": "magnet_link",
"translation": "マグネットリンク"
"translation": "magnet リンク"
},
{
"id": "all_categories",
"translation": "すべてのカテゴリ"
"translation": "すべてのカテゴリ"
},
{
"id": "anime",
@ -349,19 +349,19 @@
},
{
"id": "anime_amv",
"translation": "アニメ  アニメミュジックビデオAMV)"
"translation": "アニメ AMV"
},
{
"id": "anime_english_translated",
"translation": "アニメ ‐ 英語に訳した"
"translation": "アニメ 英訳済み"
},
{
"id": "anime_non_english_translated",
"translation": "アニメ ‐ 非英語に訳した"
"translation": "アニメ 非英訳"
},
{
"id": "anime_raw",
"translation": "アニメ  raw"
"translation": "アニメ RAW"
},
{
"id": "audio",
@ -369,27 +369,27 @@
},
{
"id": "audio_lossless",
"translation": "オーディオ ‐ 可逆圧縮"
"translation": "オーディオ 可逆圧縮方式 (flacなど)"
},
{
"id": "audio_lossy",
"translation": "オーディオ ‐ 損失圧縮"
"translation": "オーディオ 非可逆圧縮方式 (mp3など)"
},
{
"id": "literature",
"translation": "文献"
"translation": ""
},
{
"id": "literature_english_translated",
"translation": "文献 ‐  英語に訳した"
"translation": " 英訳済み"
},
{
"id": "literature_raw",
"translation": "文献  raw"
"translation": " RAW"
},
{
"id": "literature_non_english_translated",
"translation": "文献 ‐ 非英語に訳した"
"translation": " 非英訳"
},
{
"id": "live_action",
@ -397,31 +397,31 @@
},
{
"id": "live_action_english_translated",
"translation": "実写 ‐ 英語に訳した"
"translation": "実写 英訳済み"
},
{
"id": "live_action_idol_pv",
"translation": "実写 ‐ アイドル/PV"
"translation": "実写 アイドル / PV"
},
{
"id": "live_action_non_english_translated",
"translation": "実写 ‐ 非英語に訳した"
"translation": "実写 非英訳"
},
{
"id": "live_action_raw",
"translation": "実写  raw"
"translation": "実写 RAW"
},
{
"id": "pictures",
"translation": "ピクチャー"
"translation": "画像"
},
{
"id": "pictures_graphics",
"translation": "ピクチャー ‐ グラフィックス"
"translation": "画像 グラフィック"
},
{
"id": "pictures_photos",
"translation": "ピクチャー ‐ 写真"
"translation": "画像 写真"
},
{
"id": "software",
@ -429,31 +429,31 @@
},
{
"id": "software_applications",
"translation": "ソフトウェア ‐ アプリケーション"
"translation": "ソフトウェア アプリ"
},
{
"id": "software_games",
"translation": "ソフトウェア  ゲーム"
"translation": "ソフトウェア ゲーム"
},
{
"id": "torrent_description",
"translation": "トレントの説明"
"translation": "Torrent の説明"
},
{
"id": "description_markdown_notice",
"translation": "説明に、マークダウンを使えます。"
"translation": "説明文には MarkDown 記法が使えます。"
},
{
"id": "show_all",
"translation": "すべて見せる"
"translation": "すべて表示"
},
{
"id": "filter_remakes",
"translation": "リメクを濾す"
"translation": "リメイクされたフィルター"
},
{
"id": "trusted",
"translation": "信頼できる"
"translation": "信頼されたもの"
},
{
"id": "id",
@ -469,11 +469,11 @@
},
{
"id": "ascending",
"translation": "昇"
"translation": ""
},
{
"id": "search",
"translation": "サーチ"
"translation": "検索"
},
{
"id": "hash",
@ -481,7 +481,7 @@
},
{
"id": "description",
"translation": "記述"
"translation": "説明"
},
{
"id": "comments",
@ -489,15 +489,15 @@
},
{
"id": "submit_a_comment_as_username",
"translation": "%s としてカキコする"
"translation": "%s でコメントを残す"
},
{
"id": "submit_a_comment_as_anonymous",
"translation": "匿名ユーザーとしてカキコする"
"translation": "匿名ユーザーでコメントを残す"
},
{
"id": "submit",
"translation": "カキコする"
"translation": "送信"
},
{
"id": "personal_info",
@ -517,7 +517,7 @@
},
{
"id": "banned",
"translation": "アク禁"
"translation": "BAN"
},
{
"id": "default",
@ -525,30 +525,30 @@
},
{
"id": "trusted_member",
"translation": "信頼できるメンバー"
"translation": "信頼されたメンバー"
},
{
"id": "moderator",
"translation": "モデレータ"
"translation": "モデレータ"
},
{
"id": "save_changes",
"translation": "変更をセーブ"
"translation": "変更を保存"
},
{
"id": "profile_updated",
"translation": "あなたのプロフィールは正しく更新されました!"
"translation": "プロフィールが更新されました。"
},
{
"id": "delete_account",
"translation": "アカウントを削除する"
"translation": "アカウントの削除"
},
{
"id": "delete_account_confirm",
"translation": "このアカウントを削除してもよろしいですか"
"translation": "このアカウントを削除してもよろしいですか"
},
{
"id": "delete_success",
"translation": "このアカウントが削除されました。"
"translation": "アカウントが削除されました。"
}
]

Voir le fichier

@ -49,7 +49,7 @@
},
{
"id":"i_agree",
"translation": "동의합니다"
"translation": "동의"
},
{
"id":"terms_conditions_confirm",
@ -65,11 +65,11 @@
},
{
"id":"terms_conditions",
"translation": "약관"
"translation": "이용약관"
},
{
"id":"terms_conditions_full",
"translation": "블라블라"
"translation": "ㅅㅂ"
},
{
"id":"remember_me",
@ -115,6 +115,10 @@
"id":"follow",
"translation": "팔로우"
},
{
"id":"unfollow",
"translation": "언팔로우"
},
{
"id":"profile_page",
"translation": "%s 프로필 페이지"
@ -165,7 +169,7 @@
},
{
"id": "fap",
"translation": ""
"translation": "자위"
},
{
"id": "advanced_search",
@ -201,11 +205,11 @@
},
{
"id": "sign_up",
"translation": "가입"
"translation": "회원가입"
},
{
"id": "no_results_found",
"translation": "결과 없음"
"translation": "검색결과가 없습니다"
},
{
"id": "notice_keep_seeding",
@ -221,7 +225,7 @@
},
{
"id": "what_happened",
"translation": "무슨 일이 있었던거야?"
"translation": "무슨 일입니까?"
},
{
"id": "nyaa_se_went_offline",
@ -341,23 +345,23 @@
},
{
"id": "anime",
"translation": "Anime"
"translation": "애니"
},
{
"id": "anime_amv",
"translation": "Anime - 애니메이션 뮤직 비디오"
"translation": "애니 - 애니메이션 뮤직 비디오"
},
{
"id": "anime_english_translated",
"translation": "Anime - 영문 번역"
"translation": "애니 - 영문 번역"
},
{
"id": "anime_non_english_translated",
"translation": "Anime - 비-영문 번역"
"translation": "애니 - 비-영문 번역"
},
{
"id": "anime_raw",
"translation": "Anime - Raw"
"translation": "애니 - Raw"
},
{
"id": "audio",
@ -409,27 +413,27 @@
},
{
"id": "pictures",
"translation": "Pictures"
"translation": "사진"
},
{
"id": "pictures_graphics",
"translation": "Pictures - 그래픽"
"translation": "사진 - 그래픽"
},
{
"id": "pictures_photos",
"translation": "Pictures - 사진"
"translation": "사진 - 사진"
},
{
"id": "software",
"translation": "Software"
"translation": "소프트웨어"
},
{
"id": "software_applications",
"translation": "Software - 응용프로그램"
"translation": "소프트웨어 - 응용프로그램"
},
{
"id": "software_games",
"translation": "Software - 게임"
"translation": "소프트웨어 - 게임"
},
{
"id": "torrent_description",
@ -453,7 +457,7 @@
},
{
"id": "id",
"translation": "ID"
"translation": "아이디"
},
{
"id": "downloads",

Voir le fichier

@ -21,7 +21,7 @@
},
{
"id":"register_title",
"translation": "Создание новой учетной записи"
"translation": "Создание нового аккаунта"
},
{
"id":"signup_box_title",
@ -45,7 +45,7 @@
},
{
"id":"confirm_password",
"translation": "Подтвердите Пароль"
"translation": "Подтвердите пароль"
},
{
"id":"i_agree",
@ -57,7 +57,7 @@
},
{
"id":"signin",
"translation": "Вход"
"translation": "Войти"
},
{
"id":"register",
@ -97,15 +97,19 @@
},
{
"id":"verify_success",
"translation": "<i style=\"color:limegreen\" class=\"glyphicon glyphicon-ok-circle\"></i>Теперь ваша учетная запись активирована!"
"translation": "<i style=\"color:limegreen\" class=\"glyphicon glyphicon-ok-circle\"></i>Теперь ваш аккаунт активирован!"
},
{
"id":"signup_verification_email",
"translation": "Теперь, в качестве последнего шага регистрации, проверьте свой почтовый ящик (или папку спам) и нажмите ссылку для активации вашей учетной записи!"
"translation": "Теперь, в качестве последнего шага регистрации, проверьте свой почтовый ящик (или папку спам) и нажмите ссылку для активации вашего аккаунта!"
},
{
"id":"signup_verification_noemail",
"translation": "Регистрация прошла успешно, теперь вы можете использовать свой аккаунт."
},
{
"id":"settings",
"translation": "Настройки учетной записи"
"translation": "Настройки аккаунта"
},
{
"id":"torrents",
@ -115,6 +119,18 @@
"id":"follow",
"translation": "Следить"
},
{
"id":"unfollow",
"translation": "Отписаться"
},
{
"id":"user_followed_msg",
"translation": "Вы отслеживаете %s!"
},
{
"id":"user_unfollowed_msg",
"translation": "Вы отписаны от %s!"
},
{
"id":"profile_page",
"translation": "Страница профиля %s"
@ -445,7 +461,7 @@
},
{
"id": "filter_remakes",
"translation": "Фильтрация римейков"
"translation": "Фильтрация повторов"
},
{
"id": "trusted",
@ -494,5 +510,97 @@
{
"id": "submit",
"translation": "Отправить"
},
{
"id": "personal_info",
"translation": "Личная информация"
},
{
"id": "language",
"translation": "Язык"
},
{
"id": "current_password",
"translation": "Текущий пароль"
},
{
"id": "role",
"translation": "Роль"
},
{
"id": "banned",
"translation": "Banned"
},
{
"id": "default",
"translation": "По умолчанию"
},
{
"id": "trusted_member",
"translation": "Надежный пользователь"
},
{
"id": "moderator",
"translation": "Модератор"
},
{
"id": "save_changes",
"translation": "Сохранить изменения"
},
{
"id": "profile_updated",
"translation": "Ваш профиль был успешно обновлен!"
},
{
"id": "delete_account",
"translation": "Удалить аккаунт"
},
{
"id": "delete_account_confirm",
"translation": "Вы уверены, что хотите удалить этот аккаунт?"
},
{
"id": "delete_success",
"translation": "Аккаунт успешно удален!"
},
{
"id": "moderation",
"translation": "На модерации"
},
{
"id": "who_is_renchon",
"translation": "Кто, черт побери, такой れんちょん?"
},
{
"id": "renchon_anon_explanation",
"translation": "れんちょん Это имя пользователя, назначенное для загрузок и комментариев, сделанных анонимно. Он также используется для торрентов, импортированных из оригинального nyaa, хотя оригинальный загрузчик может отображаться рядом."
},
{
"id": "mark_as_remake",
"translation": "Отметить как повтор"
},
{
"id": "email_changed",
"translation": "Email адрес успешно изменен! Однако вам нужно будет подтвердить это, нажав на ссылку, присланную на Email адрес: %s"
},
{
"id": "torrent_status",
"translation": "Статус торрента"
},
{
"id": "torrent_status_hidden",
"translation": "Скрытый"
},
{
"id": "torrent_status_normal",
"translation": "Обычный"
},
{
"id": "torrent_status_remake",
"translation": "Повтор"
},
{
"id": "profile_edit_page",
"translation": "Изменение профиля %s's"
}
]

Voir le fichier

@ -581,7 +581,7 @@
},
{
"id": "email_changed",
"translation": "เปลี่ยนอีเมลเรียบร้อย! แต่คุณยังต้องยนยันด้วยลิงค์ที่ส่งไปยัง: %s"
"translation": "เปลี่ยนอีเมลเรียบร้อย! แต่คุณยังต้องยนยันด้วยลิงค์ที่ส่งไปยัง: %s"
},
{
"id": "torrent_status",
@ -598,5 +598,9 @@
{
"id": "torrent_status_remake",
"translation": "งานทำซ้ำ"
}
},
{
"id": "profile_edit_page",
"translation": "แก้ไขโปรไฟล์ของ %s"
}
]

Voir le fichier

@ -56,6 +56,9 @@ func SetTranslation(tmpl *template.Template, language string, languages ...strin
"T": func(str string, args ...interface{}) template.HTML {
return template.HTML(fmt.Sprintf(T(str), args...))
},
"Ts": func(str string, args ...interface{}) string {
return fmt.Sprintf(T(str), args...)
},
})
return T
}