Compare commits

...

54 Commits

Author SHA1 Message Date
Michael Mayer
dd3c80bd62 Frontend: Reformat gettext.config.js with eslint
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-03-24 09:26:51 +01:00
Anastasiia
fb65bb7935 Frontend: add dynamic loading language json file 2025-03-21 09:46:11 +01:00
Anastasiia
78698abcfa Frontend: gettext config copying files to assets folder 2025-03-21 09:46:11 +01:00
Anastasiia
c81890f86a Frontend: delete translations 2025-03-21 09:46:11 +01:00
Michael Mayer
9cb7be07d0 Merge branch 'develop' into scratch/frontend 2025-03-20 12:56:35 +01:00
Michael Mayer
d834e5058b Merge branch 'develop' into scratch/frontend 2025-03-20 12:03:57 +01:00
Michael Mayer
05b9bab4e3 Merge branch 'develop' into scratch/frontend 2025-03-20 11:24:48 +01:00
Michael Mayer
b3d8448927 Merge branch 'develop' into scratch/frontend 2025-03-19 16:51:58 +01:00
Michael Mayer
6fc66dec36 Merge branch 'develop' into scratch/frontend 2025-03-19 16:47:18 +01:00
Michael Mayer
8f531d5a56 Merge branch 'develop' into scratch/frontend 2025-03-19 14:52:37 +01:00
Michael Mayer
334185bb0f Merge branch 'develop' into scratch/frontend 2025-03-19 12:01:18 +01:00
Michael Mayer
b84505f5d6 Merge branch 'develop' into scratch/frontend 2025-03-18 18:12:46 +01:00
Michael Mayer
312d230f02 Merge branch 'develop' into scratch/frontend 2025-03-18 16:51:23 +01:00
Michael Mayer
fdd92d3a0a Merge branch 'develop' into scratch/frontend 2025-03-18 14:57:59 +01:00
Michael Mayer
feb2402c0a Merge branch 'develop' into scratch/frontend 2025-03-18 11:56:09 +01:00
Michael Mayer
df892d1f81 Merge branch 'develop' into scratch/frontend 2025-03-18 09:11:58 +01:00
Michael Mayer
5ef580fc42 Merge branch 'develop' into scratch/frontend 2025-03-18 06:28:21 +01:00
Michael Mayer
d52c17da7a Merge branch 'develop' into scratch/frontend 2025-03-17 19:29:48 +01:00
Michael Mayer
fba42f21d1 Merge branch 'develop' into scratch/frontend 2025-03-17 17:53:53 +01:00
Michael Mayer
38cea8dc09 Merge branch 'develop' into scratch/frontend 2025-03-17 13:29:16 +01:00
Michael Mayer
2a14a8d958 Merge branch 'develop' into scratch/frontend 2025-03-17 13:24:38 +01:00
Michael Mayer
3d3d170e33 Merge branch 'develop' into scratch/frontend 2025-03-16 17:03:09 +01:00
Michael Mayer
6882d0ce14 Merge branch 'develop' into scratch/frontend 2025-03-16 16:25:07 +01:00
Michael Mayer
62e1ff9f48 Merge branch 'develop' into scratch/frontend 2025-03-16 16:11:05 +01:00
Michael Mayer
26500ee80e Merge branch 'develop' into scratch/frontend 2025-03-16 13:25:52 +01:00
Michael Mayer
6c90fb5b81 Merge branch 'develop' into scratch/frontend 2025-03-15 16:31:34 +01:00
Michael Mayer
4dfa6d9062 Merge branch 'develop' into scratch/frontend 2025-03-15 16:07:07 +01:00
Michael Mayer
3ff71ebb00 Merge branch 'develop' into scratch/frontend 2025-03-15 14:53:01 +01:00
Michael Mayer
2fcfc702a9 Merge branch 'develop' into scratch/frontend 2025-03-14 16:16:54 +01:00
Michael Mayer
5c4dcbcce4 Merge branch 'develop' into scratch/frontend 2025-03-14 16:05:23 +01:00
Michael Mayer
6848a5cbee Merge branch 'develop' into scratch/frontend 2025-03-14 12:56:10 +01:00
Michael Mayer
d6a6fa2ed9 Merge branch 'develop' into scratch/frontend 2025-03-14 12:39:16 +01:00
Michael Mayer
0369121421 Merge branch 'develop' into scratch/frontend 2025-03-14 12:34:55 +01:00
Michael Mayer
63528d1090 Merge branch 'develop' into scratch/frontend 2025-03-13 11:31:32 +01:00
Michael Mayer
afe5034772 UX: Increase font size of .v-table footer in css/vuetify.css
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-03-13 07:53:32 +01:00
Michael Mayer
5e32205bda Merge branch 'develop' into scratch/frontend 2025-03-13 07:39:02 +01:00
Michael Mayer
81a8dd28f8 Merge branch 'develop' into scratch/frontend 2025-03-12 04:48:36 +01:00
Michael Mayer
68084bb365 Merge branch 'develop' into scratch/frontend 2025-03-11 23:46:03 +01:00
Michael Mayer
24f4705351 Merge branch 'develop' into scratch/frontend 2025-03-11 21:01:03 +01:00
Michael Mayer
0b9719fc44 Merge branch 'develop' into scratch/frontend 2025-03-11 20:39:06 +01:00
Michael Mayer
bcae07ae46 Merge branch 'develop' into scratch/frontend
# Conflicts:
#	frontend/package-lock.json
#	frontend/package.json
2025-03-11 18:12:34 +01:00
Michael Mayer
7d950cb269 Merge branch 'develop' into scratch/frontend 2025-03-11 10:46:03 +01:00
Michael Mayer
9fee538925 Merge branch 'develop' into scratch/frontend 2025-03-10 18:31:54 +01:00
Michael Mayer
a01317fa1a Merge branch 'develop' into scratch/frontend 2025-03-10 15:22:20 +01:00
Michael Mayer
6f36a9913d Merge branch 'develop' into scratch/frontend 2025-03-10 13:17:08 +01:00
Michael Mayer
173f6a065c Merge branch 'develop' into scratch/frontend 2025-03-10 12:51:40 +01:00
Michael Mayer
0449e4cc8c Merge branch 'develop' into scratch/frontend 2025-03-04 08:35:49 +01:00
Michael Mayer
e9a9e9f436 Merge branch 'develop' into scratch/frontend 2025-03-04 08:28:51 +01:00
Michael Mayer
c7cbc920e8 Merge branch 'develop' into scratch/frontend 2025-03-03 21:05:22 +01:00
Michael Mayer
7cf730ff20 Merge branch 'develop' into scratch/frontend 2025-03-03 20:28:37 +01:00
Michael Mayer
1345d471eb Merge branch 'develop' into scratch/frontend 2025-03-03 20:13:08 +01:00
Michael Mayer
81e0502bdd Merge branch 'develop' into scratch/frontend 2025-03-03 20:06:22 +01:00
Anastasiia
746729607b Frontend: add gettext.config.js for vue3-gettext 2025-03-03 11:36:34 +01:00
Anastasiia
df7df30161 Frontend: add loading places-page chunk 2025-03-03 11:35:09 +01:00
51 changed files with 122 additions and 3926 deletions

View File

@@ -0,0 +1,43 @@
const glob = require("glob");
const fs = require("fs");
const path = require("path");
// Find all .po files in the frontend/src/locales
const poFiles = glob.sync("src/locales/*.po");
if (poFiles.length === 0) {
console.error("No .po files found in src/locales");
process.exit(1);
}
// Find output folder or create the new one in assets/static/locales
const outputDir = path.resolve(__dirname, "../assets/static/locales");
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// Copy .po files from frontend/src/locales to assets/static/locales
poFiles.forEach((filePath) => {
const fileName = path.basename(filePath);
const destinationPath = path.join(outputDir, fileName);
fs.copyFileSync(filePath, destinationPath);
});
// Find all languages codes from .po files (cut file names without .po)
const languageCodes = poFiles.map((filePath) => {
const fileName = path.basename(filePath);
return fileName.replace(".po", "");
});
// Transform files from .po to .json in the assets/static/locales
module.exports = {
input: {
path: path.resolve(__dirname, "../assets/static/locales"),
include: ["**/*.po"],
},
output: {
path: path.resolve(__dirname, "../assets/static/locales"),
jsonPath: "",
locales: languageCodes,
splitJson: true,
},
};

View File

@@ -71,7 +71,7 @@ window.$isMobile = $isMobile;
$config.progress(50);
$config.update().finally(() => {
$config.update().finally(async () => {
// Initialize libs and framework.
$config.progress(66);
@@ -114,9 +114,6 @@ $config.update().finally(() => {
});
};
// Create Vue 3 Gettext instance.
const gettext = createGettext($config);
// Create Vuetify 3 instance.
const vuetify = createVuetify({
defaults,
@@ -139,7 +136,10 @@ $config.update().finally(() => {
// Use Vuetify 3.
app.use(vuetify);
// Use Vue 3 Gettext.
await $config.loadLanguageAsync($config.getLanguageLocale());
// Create and use Vue 3 Gettext instance.
const gettext = createGettext($config);
app.use(gettext);
// Use HTML sanitizer with v-sanitize directive.

View File

@@ -26,7 +26,6 @@ Additional information can be found in our Developer Guide:
import Photos from "page/photos.vue";
import Albums from "page/albums.vue";
import AlbumPhotos from "page/album/photos.vue";
import Places from "page/places.vue";
import Browse from "page/library/browse.vue";
import Errors from "page/library/errors.vue";
import Labels from "page/labels.vue";
@@ -278,13 +277,13 @@ export default [
{
name: "places",
path: "/places",
component: Places,
component: () => import(/* webpackChunkName: "places-page" */ "page/places.vue"),
meta: { title: $gettext("Places"), requiresAuth: true },
},
{
name: "places_view",
path: "/places/view/:s",
component: Places,
component: () => import(/* webpackChunkName: "places-page" */ "page/places.vue"),
meta: { title: $gettext("Places"), requiresAuth: true },
},
{

View File

@@ -26,7 +26,6 @@ Additional information can be found in our Developer Guide:
import $api from "common/api";
import $event from "common/event";
import * as themes from "options/themes";
import translations from "locales/translations.json";
import { Languages } from "options/options";
import { Photo } from "model/photo";
import { onInit, onSetTheme } from "common/hooks";
@@ -48,7 +47,7 @@ export default class Config {
this.updating = false;
this.$vuetify = null;
this.translations = translations;
this.translations = null;
if (!values || !values.siteTitle) {
// Omit warning in unit tests.
@@ -417,6 +416,20 @@ export default class Config {
return !this.allowAny(resource, perm);
}
// getLanguageJson loading the json file by language abbreviation (e.g. "en" or "zh_TW" (minimum 2 letters).)
async loadLanguageAsync (locale) {
try {
// Dynamically import the translation JSON file based on the selected language
const file = await import(/* webpackChunkName: "[request]" */`../../../assets/static/locales/${locale}.json`);
// Apply translations
this.translations = file.default;
this.setLanguage(locale, true);
} catch (error) {
console.error(`Error loading language file for ${locale}:`, error);
}
};
// setLanguage sets the ISO/IEC 15897 locale,
// e.g. "en" or "zh_TW" (minimum 2 letters).
setLanguage(locale, apply) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"en":{"Next":"Next"}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -64,6 +64,16 @@ const config = {
devtool: isDev ? "inline-source-map" : false,
optimization: {
minimize: !isDev,
splitChunks: {
cacheGroups: {
places: {
test: /[\\/]page[\\/]places\.vue$/,
name: "places-page",
enforce: true,
},
vendors: false,
},
},
},
entry: {
app: PATHS.app,
@@ -72,17 +82,15 @@ const config = {
},
output: {
path: PATHS.build,
publicPath: PATHS.public,
filename: "[name].[contenthash].js",
filename: '[name].[contenthash].js',
clean: true,
chunkFilename: 'locales/[name].json',
},
resolve: {
modules: isCustom ? [PATHS.custom, PATHS.src, PATHS.modules] : [PATHS.src, PATHS.modules],
preferRelative: true,
alias: {
// TODO: change it
vue$: "vue/dist/vue.runtime.esm-bundler.js",
// vue: isDev ? "vue/dist/vue.js" : "vue/dist/vue.min.js",
vue$: isDev ? "vue/dist/vue.esm-bundler.js" : "vue/dist/vue.runtime.esm-bundler.js",
},
},
plugins: [