mirror of
https://github.com/mempool/mempool.git
synced 2025-01-01 03:04:27 +01:00
4658b47007
This PR adds basic i18n support into the mempool frontend, together with a smooth workflow for developers and translators to collaborate: * Using the existing @angular/localize module, developers add i18n metadata to any frontend strings their new features or changes modify * Using the new npm script `i18n-extract-from-source`, developers extract the i18n data from source code into `src/locale/messages.xlf` * After pushing the updated `src/locale/messages.xlf` to GitHub, the Transifex service will update its database from the new source data * Using the Transifex website UI, translators can work together to translate all the mempool frontend strings into their native languages * Using the new npm script `i18n-pull-from-transifex`, developers can pull in completed translations from Transifex, and commit them into git. This flow requires an API key from Transifex, which can be obtained at https://www.transifex.com/user/settings/api/ to be used with the python script installed by `pip install transifex-client` - after preparing these, run the npm script which will ask you for the API key the first time. When downloading is complete, you can test building the frontend, and if successful, commit the new strings files into git. This PR implements a new locale selector in the footer of the homepage dashboard, and includes WIP translations for the following languages: * Czech (cs) * German (de) * Japanese (ja) * Norwegian (nn) * Spanish (es) * Swedish (sv) * Ukrainian (uk) * Persian (fa) * Portugese (pt) * Turkish (tr) * Dutch (nl) * French (fr) * Chinese (zh) * Slovenian (sl) * Korean (ko) * Polish (pl) The user-agent's `Accept-Language` header is used to automatically detect their preferred language, which can be manually overriden by the pull-down selector, which saves their preference to a cookie, which is used by nginx to serve the correct HTML bundle to the user. Remaining tasks include adding i18n metadata for strings in the Bisq and Liquid frontend code, mouseover hover tooltip strings, hard-coded og metadata inside HTML templates, and many other places. This will be done in a separate PR. When upgrading to add i18n support, mempool instance operators must take care to install the new nginx.conf and nginx-mempool.conf files, and tweak for their specific site configuration. Fixes #81
157 lines
4.5 KiB
Nginx Configuration File
157 lines
4.5 KiB
Nginx Configuration File
user nobody;
|
|
pid /var/run/nginx.pid;
|
|
|
|
worker_processes auto;
|
|
worker_rlimit_nofile 100000;
|
|
|
|
events {
|
|
worker_connections 9000;
|
|
multi_accept on;
|
|
}
|
|
|
|
http {
|
|
sendfile on;
|
|
tcp_nopush on;
|
|
tcp_nodelay on;
|
|
|
|
server_tokens off;
|
|
server_name_in_redirect off;
|
|
|
|
include /usr/local/etc/nginx/mime.types;
|
|
default_type application/octet-stream;
|
|
|
|
access_log /var/log/nginx/access.log;
|
|
error_log /var/log/nginx/error.log;
|
|
|
|
# reset timed out connections freeing ram
|
|
reset_timedout_connection on;
|
|
# maximum time between packets the client can pause when sending nginx any data
|
|
client_body_timeout 10s;
|
|
# maximum time the client has to send the entire header to nginx
|
|
client_header_timeout 10s;
|
|
# timeout which a single keep-alive client connection will stay open
|
|
keepalive_timeout 69s;
|
|
# maximum time between packets nginx is allowed to pause when sending the client data
|
|
send_timeout 10s;
|
|
|
|
# number of requests per connection, does not affect SPDY
|
|
keepalive_requests 100;
|
|
|
|
# enable gzip compression
|
|
gzip on;
|
|
gzip_vary on;
|
|
gzip_comp_level 6;
|
|
gzip_min_length 1000;
|
|
gzip_proxied expired no-cache no-store private auth;
|
|
# text/html is always compressed by gzip module
|
|
gzip_types application/javascript application/json application/ld+json application/manifest+json application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard;
|
|
|
|
# limit request body size
|
|
client_max_body_size 10m;
|
|
|
|
# proxy cache
|
|
proxy_cache off;
|
|
proxy_cache_path /var/cache/nginx keys_zone=cache:20m levels=1:2 inactive=600s max_size=500m;
|
|
types_hash_max_size 2048;
|
|
|
|
# rate limit requests
|
|
limit_req_zone $binary_remote_addr zone=api:5m rate=200r/m;
|
|
limit_req_zone $binary_remote_addr zone=electrs:5m rate=2000r/m;
|
|
limit_req_status 429;
|
|
|
|
# rate limit connections
|
|
limit_conn_zone $binary_remote_addr zone=websocket:10m;
|
|
limit_conn_status 429;
|
|
|
|
map $http_accept_language $header_lang {
|
|
default en-US;
|
|
~*^en-US en-US;
|
|
~*^en en-US;
|
|
~*^cs cs;
|
|
~*^es es;
|
|
~*^fa fa;
|
|
~*^ja ja;
|
|
~*^nl nl;
|
|
~*^pl pl;
|
|
~*^pt pt;
|
|
~*^sv sv;
|
|
~*^uk uk;
|
|
}
|
|
|
|
map $cookie_lang $lang {
|
|
default $header_lang;
|
|
~*^en-US en-US;
|
|
~*^en en-US;
|
|
~*^cs cs;
|
|
~*^es es;
|
|
~*^fa fa;
|
|
~*^ja ja;
|
|
~*^nl nl;
|
|
~*^pl pl;
|
|
~*^pt pt;
|
|
~*^sv sv;
|
|
~*^uk uk;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name mempool.space mempool.ninja bsq.ninja node100.bitcoin.wiz.biz;
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name bsq.ninja;
|
|
ssl_certificate /usr/local/etc/letsencrypt/live/bsq.ninja/fullchain.pem;
|
|
ssl_certificate_key /usr/local/etc/letsencrypt/live/bsq.ninja/privkey.pem;
|
|
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;
|
|
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;
|
|
|
|
set $redirect_uri https://mempool.space/bisq;
|
|
if ($uri = /tx.html) {
|
|
set $redirect_uri https://mempool.space/bisq/tx/$arg_tx;
|
|
}
|
|
if ($uri = /txo.html) {
|
|
set $redirect_uri https://mempool.space/bisq/tx/$arg_txo;
|
|
}
|
|
if ($uri = /Address.html) {
|
|
set $redirect_uri https://mempool.space/bisq/address/$arg_addr;
|
|
}
|
|
return 301 $redirect_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name node100.bitcoin.wiz.biz;
|
|
ssl_certificate /usr/local/etc/letsencrypt/live/node100.bitcoin.wiz.biz/fullchain.pem;
|
|
ssl_certificate_key /usr/local/etc/letsencrypt/live/node100.bitcoin.wiz.biz/privkey.pem;
|
|
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;
|
|
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;
|
|
|
|
include /usr/local/etc/nginx/nginx-mempool.conf;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name mempool.ninja;
|
|
ssl_certificate /usr/local/etc/letsencrypt/live/mempool.ninja/fullchain.pem;
|
|
ssl_certificate_key /usr/local/etc/letsencrypt/live/mempool.ninja/privkey.pem;
|
|
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;
|
|
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;
|
|
|
|
include /usr/local/etc/nginx/nginx-mempool.conf;
|
|
}
|
|
|
|
server {
|
|
listen 127.0.0.1:81;
|
|
listen 443 ssl default http2 backlog=1024;
|
|
server_name mempool.space;
|
|
ssl_certificate /usr/local/etc/letsencrypt/live/mempool.space/fullchain.pem;
|
|
ssl_certificate_key /usr/local/etc/letsencrypt/live/mempool.space/privkey.pem;
|
|
include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;
|
|
ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem;
|
|
|
|
include /usr/local/etc/nginx/nginx-mempool.conf;
|
|
}
|
|
}
|