Commit b1ad145532

b1ad14553277d9d72a5e4b4462a52a2e2d0fdbb1

parent: 155a7b9ea6

Verified · cmc

cmc <hello@cleberg.net> · 2026-07-15 06:54 UTC

fix: remove russian language throughout

Layout: unified · split

README.md −40
@@ -8,7 +8,6 @@
88
99Instances: [`INSTANCES.md`](INSTANCES.md)
1010
11# EN 🇺🇸
1211## Description
1312SkunkyArt 🦨 — an alternative frontend for DeviantArt that works entirely
1413without JavaScript.
@@ -32,42 +31,3 @@ To do this, you must either make a PR by adding your instance to the
3231`instances.json` and `INSTANCES.md` files (you can use `--add-instance`
3332cli-argument to automatically add the instance to these files) or create an
3433Issue.
35
36## Acknowledgements
37* [vlnst](https://git.bloat.cat/vlnst) — wrote a Docker file.
38* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — helped me understand Go
39 and gave me a lot of useful advice on this language.
40* [meoww](https://codeberg.org/meoww) — translated some sentences into English
41 and wrote a service for openrc
42
43# RU 🇷🇺
44## Описание
45SkunkyArt 🦨 — альтернативный фронтенд к DeviantArt, который полностью работает
46без JS (JavaScript).
47
48## Сборка
49Рекомендуется производить сборку с тегом 'embed', поскольку он встраивает
50заготовки в бинарный файл. Если вы планируете изменять заготовки, то не
51используйте этот тег. Также вы можете добавить аргумент `-ldflags "-w -s"` (у
52GCCGO он называется по-другому — `gccgoflags`) для уменьшения размера выходного
53файла. Вот пример:
54
55`go build -tags embed -ldflags "-w -s"`
56
57## Настройка
58Пример конфига находится в файле `config.example.json`. Чтобы указать свой
59конфиг, используйте cli-аргумент `--config`.
60
61См. [`SETUP-RU.md`](SETUP-RU.md) для информации о настройки фронтенда.
62
63## Добавление инстанса в список
64Чтобы это сделать, вы должны либо сделать PR, добавив в файлы `instances.json` и
65`INSTANCES.md` свой инстанс (можете воспользоваться cli-аргументом
66`--add-instance`, который автоматически это сделает), либо создать Issue.
67
68## Благодарности
69* [vlnst](https://git.bloat.cat/vlnst) — написал Docker-файл.
70* [Лис⚛](https://go.kde.org/matrix/#/@fox:matrix.org) — помог разобраться в Go и
71 много чего полезного посоветовал по этому языку.
72* [meoww](https://codeberg.org/meoww) — перевела некоторые предложения на
73 английский язык и написала сервис для openrc
SETUP-RU.md deleted −42
@@ -1,42 +0,0 @@
1[English version 🇬🇧](SETUP.md)
2
3# Единицы измерения
4Размер файла в кеше измеряется в мегабайтах.<br>
5Единицы времени:
6* `i` — минуты
7* `h` — часы
8* `w` — недели
9* `m` — месяца
10* `y` — года
11
12# Конфигурация
13* `listen` — IP и порт для слушанья; заполняется по такой форме: ip:port
14* `uri` — URI инстанса. Пример: `"uri":"/art/"` -> https://skunky.ebloid.ru/art/
15* `cache` — Система кеширования; по умолчанию выключена
16 * `enabled` — Состояние системы кеширования; требуется булёвое значение
17 * `path` — Полный путь до каталога, куда будет сохраняться кеш
18 * `lifetime` — Время жизни файла в кеше, требует целочисленное значение, дополненное суффиксом времени (см. 'Единицы времени')
19 * `max-size` — Максимальный размер файла
20 * `update-interval` — Интервал для автоматической ротации кеша
21* `static-path` — Строка, являющаяся путём до статики. SkunkyArt при запуске скопирует содержимое этого каталога в ОЗУ. Однако, если вы собрали фронтенд с тегом 'embed', то этого не произайдёт
22* `download-proxy` — Адрес прокси для загрузки файлов
23* `user-agent` — Строка, которая используется в качестве User-Agent'а
24
25# Настройка обратного прокси
26Если вы собираетесь хостить инстанс в Интернете, то вам следует настроить заголовок прокси [`X-Forwarded-Proto`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto). В противном случае, все ссылки на вашем инстансе будут вида "http". Ниже есть информация о том, как настроить обратное проксирование:
27
28Nginx:
29```apache
30server {
31 listen 443 ssl;
32 server_name skunky.example.com;
33
34 # Если используется поддомен, то вместо ((BASE_URL)), укажите '/'.
35 location ((BASE_URL)) {
36 proxy_set_header X-Forwarded-Proto $scheme;
37 proxy_set_header Host $host;
38 proxy_http_version 1.1;
39 proxy_pass http://((IP)):((PORT));
40 }
41}
42```
\ No newline at end of file
SETUP.md −2
@@ -1,5 +1,3 @@
1[Версия на русском языке 🇷🇺](SETUP-RU.md)
2
31# Units
42Maximum file size in megabytes, requires numeric value.<br>
53Time units:
app/api.go +1 −1
@@ -57,7 +57,7 @@ func (a API) sendMedia(d *devianter.Deviation) {
5757 }
5858}
5959
60// TODO: сделать фильтры
60// TODO: add filters
6161func (a API) Random() {
6262 // Bounded retries: the loop used to be unbounded, and the DeviantArt-error
6363 // path never incremented attempt, so a single request could spin forever
app/cache.go +1 −1
@@ -1,4 +1,4 @@
1// TODO: реализовать кеширование JSON и почистить код
1// TODO: implement JSON caching and clean up the code
22package app
33
44import (
app/parsers.go +1 −1
@@ -188,7 +188,7 @@ type text struct {
188188 To int
189189}
190190
191// переписать весь этот пиздец нахуй
191// TODO: rewrite this whole mess
192192func ParseDescription(dscr devianter.Text) string {
193193 var parsedDescription strings.Builder
194194 TagBuilder := func(content string, tags ...string) string {
app/router.go +1 −1
@@ -52,7 +52,7 @@ func Router() {
5252 return fileReaded
5353 }
5454
55 // функция, что управляет всем
55 // the function that drives everything
5656 handle := func(w http.ResponseWriter, r *http.Request) {
5757 path := parsepath(r.URL.Path)
5858 Host = "http://" + r.Host
app/util.go +2 −2
@@ -261,13 +261,13 @@ func GetValueOfTag(t *html.Tokenizer) string {
261261 }
262262}
263263
264// навигация по страницам
264// page navigation
265265type DeviationList struct {
266266 Pages int
267267 More bool
268268}
269269
270// FIXME: на некоротрых артах первая страница может вызывать полное отсутствие панели навигации.
270// FIXME: on some artworks the first page can make the navigation panel disappear entirely.
271271func (s skunkyart) NavBase(c DeviationList) string {
272272 var list strings.Builder
273273
app/wrapper.go +3 −3
@@ -167,7 +167,7 @@ func (s skunkyart) GRUser() {
167167 }
168168}
169169
170// посты
170// posts
171171func (s skunkyart) Deviation(author, postname string) {
172172 id_search := regexp.MustCompile("[0-9]+").FindAllString(postname, -1)
173173 if len(id_search) < 1 {
@@ -209,7 +209,7 @@ func (s skunkyart) Deviation(author, postname string) {
209209 }
210210 }
211211
212 // хештэги
212 // hashtags
213213 for _, x := range post.Post.Deviation.Extended.Tags {
214214 var tag strings.Builder
215215 tag.WriteString(` <a href="`)
@@ -270,7 +270,7 @@ func (s skunkyart) Search() {
270270 ss.Content, daError, err = devianter.PerformSearch(s.Query, s.Page, s.Type)
271271 case 'g', 'f':
272272 ss.Content, daError, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr"))
273 case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп
273 case 'r': // scraper, since DeviantArt withholds the guest API for group search
274274 var (
275275 usernames = make(map[int]string)
276276 url strings.Builder
static/templates-noembed.go +1 −1
@@ -91,7 +91,7 @@ func try(err error) {
9191 }
9292}
9393
94/* сделано на основе https://github.com/psanford/memfs; требуется для корректной работы templates.ParseFS */
94/* based on https://github.com/psanford/memfs; required for templates.ParseFS to work correctly */
9595type fileInfo struct {
9696 name string
9797}