Synced
This commit is contained in:
parent
40c02a6b89
commit
bd4d4a39ea
5 changed files with 54 additions and 42 deletions
|
|
@ -190,7 +190,7 @@ def create_app(args):
|
|||
from libretranslate.language import load_languages
|
||||
|
||||
swagger_url = args.url_prefix + "/docs" # Swagger UI (w/o trailing '/')
|
||||
api_url = args.url_prefix + "/spec"
|
||||
api_url = "/spec"
|
||||
|
||||
bp = Blueprint('Main app', __name__)
|
||||
|
||||
|
|
@ -1270,14 +1270,13 @@ def create_app(args):
|
|||
|
||||
if args.debug:
|
||||
app.config["TEMPLATES_AUTO_RELOAD"] = True
|
||||
if args.url_prefix:
|
||||
app.register_blueprint(bp, url_prefix=args.url_prefix)
|
||||
else:
|
||||
app.register_blueprint(bp)
|
||||
|
||||
app.register_blueprint(bp)
|
||||
|
||||
limiter.init_app(app)
|
||||
|
||||
swag = swagger(app)
|
||||
swag["basePath"] = args.url_prefix if args.url_prefix != "" else "/"
|
||||
swag["info"]["version"] = get_version()
|
||||
swag["info"]["title"] = "LibreTranslate"
|
||||
swag["info"]["description"] = "Free and Open Source Machine Translation API."
|
||||
|
|
@ -1301,10 +1300,9 @@ def create_app(args):
|
|||
app.jinja_env.globals.update(_e=gettext_escaped, _h=gettext_html)
|
||||
|
||||
# Call factory function to create our blueprint
|
||||
swaggerui_blueprint = get_swaggerui_blueprint(swagger_url, api_url)
|
||||
if args.url_prefix:
|
||||
app.register_blueprint(swaggerui_blueprint, url_prefix=swagger_url)
|
||||
else:
|
||||
app.register_blueprint(swaggerui_blueprint)
|
||||
# The Blueprint is not using url_for which means the middleware does not work properly and we need to manually fix things
|
||||
swaggerui_blueprint = get_swaggerui_blueprint(swagger_url, args.url_prefix + api_url)
|
||||
swaggerui_blueprint.url_prefix = "/docs"
|
||||
app.register_blueprint(swaggerui_blueprint)
|
||||
|
||||
return app
|
||||
|
|
|
|||
|
|
@ -9,14 +9,16 @@ msgstr ""
|
|||
"Project-Id-Version: LibreTranslate 1.7.1\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-04-18 14:43-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2025-07-21 11:03+0000\n"
|
||||
"Last-Translator: Halbast Abdullah <halbastabdullah7@gmail.com>\n"
|
||||
"Language-Team: Kurdish (Central) <https://hosted.weblate.org/projects/"
|
||||
"libretranslate/app/ckb/>\n"
|
||||
"Language: ckb\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.13-dev\n"
|
||||
"Generated-By: Babel 2.12.1\n"
|
||||
|
||||
#: libretranslate/app.py:93
|
||||
|
|
@ -25,11 +27,11 @@ msgstr ""
|
|||
|
||||
#: libretranslate/app.py:209 libretranslate/templates/app.js.template:473
|
||||
msgid "Auto Detect"
|
||||
msgstr ""
|
||||
msgstr "دۆزینەوەی خۆکار"
|
||||
|
||||
#: libretranslate/app.py:311
|
||||
msgid "Unauthorized"
|
||||
msgstr ""
|
||||
msgstr "ناسەلمێنراو"
|
||||
|
||||
#: libretranslate/app.py:329
|
||||
msgid "Too many request limits violations"
|
||||
|
|
@ -37,7 +39,7 @@ msgstr ""
|
|||
|
||||
#: libretranslate/app.py:336
|
||||
msgid "Invalid API key"
|
||||
msgstr ""
|
||||
msgstr "کلیلی ئەی پی ئایی نادروست"
|
||||
|
||||
#: libretranslate/app.py:371
|
||||
msgid "Please contact the server operator to get an API key"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import sys
|
|||
|
||||
from libretranslate.app import create_app
|
||||
from libretranslate.default_values import DEFAULT_ARGUMENTS as DEFARGS
|
||||
from werkzeug.serving import run_simple
|
||||
from werkzeug.middleware.dispatcher import DispatcherMiddleware
|
||||
|
||||
|
||||
def get_args():
|
||||
|
|
@ -245,7 +247,7 @@ def get_args():
|
|||
"--url-prefix",
|
||||
default=DEFARGS['URL_PREFIX'],
|
||||
type=str,
|
||||
help="Add prefix to URL: example.com:5000/url-prefix/",
|
||||
help="Add a prefix like /url-prefix to URL: example.com:5000/url-prefix/",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
if args.url_prefix and not args.url_prefix.startswith('/'):
|
||||
|
|
@ -255,7 +257,17 @@ def get_args():
|
|||
|
||||
def main():
|
||||
args = get_args()
|
||||
app = create_app(args)
|
||||
|
||||
if args.url_prefix:
|
||||
def redirect(environ, start_response):
|
||||
start_response("301 REDIRECT", [("Content-Type", "text/plain"), ("Location", args.url_prefix)])
|
||||
yield b"Redirect..."
|
||||
|
||||
app = DispatcherMiddleware(redirect, {
|
||||
args.url_prefix: create_app(args)
|
||||
})
|
||||
else:
|
||||
app = DispatcherMiddleware(create_app(args))
|
||||
|
||||
if '--wsgi' in sys.argv:
|
||||
return app
|
||||
|
|
@ -265,7 +277,7 @@ def main():
|
|||
args.host = "::"
|
||||
|
||||
if args.debug:
|
||||
app.run(host=args.host, port=args.port)
|
||||
run_simple(args.host, args.port, app)
|
||||
else:
|
||||
from waitress import serve
|
||||
|
||||
|
|
|
|||
|
|
@ -79,18 +79,18 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
}
|
||||
}
|
||||
} else {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/frontend/settings") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/frontend/settings") }};
|
||||
self.loading = false;
|
||||
}
|
||||
};
|
||||
|
||||
settingsRequest.onerror = function() {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/frontend/settings") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/frontend/settings") }};
|
||||
self.loading = false;
|
||||
};
|
||||
|
||||
langsRequest.onerror = function() {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/languages") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/languages") }};
|
||||
self.loading = false;
|
||||
};
|
||||
|
||||
|
|
@ -284,7 +284,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
};
|
||||
|
||||
request.onerror = function() {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/translate") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/translate") }};
|
||||
self.loadingTranslation = false;
|
||||
};
|
||||
|
||||
|
|
@ -354,7 +354,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
};
|
||||
|
||||
request.onerror = function() {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/suggest") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/suggest") }};
|
||||
self.loadingTranslation = false;
|
||||
};
|
||||
|
||||
|
|
@ -443,7 +443,7 @@ document.addEventListener('DOMContentLoaded', function(){
|
|||
}
|
||||
|
||||
translateFileRequest.onerror = function() {
|
||||
const message = {{ _e("Cannot load %(url)s", url="/translate_file") }};
|
||||
const message = {{ _e("Cannot load %(url)s", url=url_prefix + "/translate_file") }};
|
||||
self.error = message;
|
||||
self.loadingFileTranslation = false;
|
||||
self.inputFile = false;
|
||||
|
|
@ -497,7 +497,7 @@ function handleLangsResponse(self, response) {
|
|||
self.handleInput(new Event('none'))
|
||||
}
|
||||
} else {
|
||||
self.error = {{ _e("Cannot load %(url)s", url="/languages") }};
|
||||
self.error = {{ _e("Cannot load %(url)s", url=url_prefix + "/languages") }};
|
||||
}
|
||||
|
||||
self.loading = false;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
<nav role="navigation">
|
||||
<div class="nav-wrapper container">
|
||||
<button data-target="nav-mobile" class="sidenav-trigger"><i class="material-icons">menu</i></button>
|
||||
<a id="logo-container" href="/" class="brand-logo noline">
|
||||
<a id="logo-container" href="{{ url_for('Main app.index') }}" class="brand-logo noline">
|
||||
<img src="{{ url_for('static', filename='icon.svg') }}" alt="" class="logo">
|
||||
<span>LibreTranslate</span>
|
||||
</a>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue