From 3313ccf05173e05407f3bb8130cadeb15631b969 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Tue, 30 Dec 2025 00:28:20 +0800 Subject: [PATCH] add contributors to the about page --- contributors.json | 59 +++++++++++++++++++++ src/global.d.ts | 6 +++ src/lib/contributors.ts | 3 ++ src/views/base/AboutPageBase.ts | 3 ++ src/views/desktop/AboutPage.vue | 91 +++++++++++++++++++++++++++++++-- src/views/mobile/AboutPage.vue | 86 +++++++++++++++++++++++++++++-- vite.config.ts | 2 + 7 files changed, 241 insertions(+), 9 deletions(-) create mode 100644 contributors.json create mode 100644 src/lib/contributors.ts diff --git a/contributors.json b/contributors.json new file mode 100644 index 00000000..8a5a3e15 --- /dev/null +++ b/contributors.json @@ -0,0 +1,59 @@ +{ + "code": [ + "jiangshengwu", + "vigdail", + "f97", + "Miguelonlonlon", + "seb26", + "nktlitvinenko", + "lvdou-bing" + ], + "translators": { + "de": [ + "chrgm" + ], + "en": [], + "es": [ + "Miguelonlonlon", + "abrugues" + ], + "fr": [ + "brieucdlf" + ], + "it": [ + "waron97" + ], + "ja": [ + "tkymmm" + ], + "kn": [ + "Darshanbm05" + ], + "ko": [ + "overworks" + ], + "nl": [ + "automagics" + ], + "pt-BR": [ + "thecodergus" + ], + "ru": [ + "artegoser" + ], + "th": [ + "natthavat28" + ], + "tr": [ + "aydnykn" + ], + "uk": [ + "nktlitvinenko" + ], + "vi": [ + "f97" + ], + "zh-Hans": [], + "zh-Hant": [] + } +} diff --git a/src/global.d.ts b/src/global.d.ts index 51c5cd34..68610a54 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -3,8 +3,14 @@ declare const __EZBOOKKEEPING_VERSION__: string; declare const __EZBOOKKEEPING_BUILD_UNIX_TIME__: string; declare const __EZBOOKKEEPING_BUILD_COMMIT_HASH__: string; declare const __EZBOOKKEEPING_LICENSE__: string; +declare const __EZBOOKKEEPING_CONTRIBUTORS__: ContributorInfo; declare const __EZBOOKKEEPING_THIRD_PARTY_LICENSES__: LicenseInfo[]; +declare interface ContributorInfo { + code: string[]; + translators: Record; +} + declare interface LicenseInfo { name: string; copyright?: string; diff --git a/src/lib/contributors.ts b/src/lib/contributors.ts new file mode 100644 index 00000000..83d4d987 --- /dev/null +++ b/src/lib/contributors.ts @@ -0,0 +1,3 @@ +export function getContributors(): ContributorInfo { + return __EZBOOKKEEPING_CONTRIBUTORS__ || {}; +} diff --git a/src/views/base/AboutPageBase.ts b/src/views/base/AboutPageBase.ts index cca8358b..f4c9bc5f 100644 --- a/src/views/base/AboutPageBase.ts +++ b/src/views/base/AboutPageBase.ts @@ -12,6 +12,7 @@ import type { LatestExchangeRateResponse } from '@/models/exchange_rate.ts'; import { parseDateTimeFromUnixTime } from '@/lib/datetime.ts'; import { getMapProvider } from '@/lib/server_settings.ts'; import { getMapWebsite } from '@/lib/map/index.ts'; +import { getContributors } from '@/lib/contributors.ts'; import { getLicense, getThirdPartyLicenses } from '@/lib/licenses.ts'; import { formatDisplayVersion, getClientDisplayVersion, getClientBuildTime } from '@/lib/version.ts'; import { clearBrowserCaches } from '@/lib/ui/common.ts'; @@ -55,6 +56,7 @@ export function useAboutPageBase() { }); const mapProviderWebsite = computed(() => getMapWebsite()); + const contributors = computed(() => getContributors()); const licenseLines = computed(() => getLicense().replace(/\r/g, '').split('\n')); const thirdPartyLicenses = computed(() => getThirdPartyLicenses()); @@ -83,6 +85,7 @@ export function useAboutPageBase() { isUserCustomExchangeRates, mapProviderName, mapProviderWebsite, + contributors, licenseLines, thirdPartyLicenses, // functions diff --git a/src/views/desktop/AboutPage.vue b/src/views/desktop/AboutPage.vue index 93ac55fc..84adf41d 100644 --- a/src/views/desktop/AboutPage.vue +++ b/src/views/desktop/AboutPage.vue @@ -110,12 +110,69 @@ {{ line }}

-
+ +

- ezBookkeeping also contains additional third party software and illustration.
- All the third party software/illustration included or linked is redistributed under the terms and conditions of their original licenses. + ezBookkeeping's codebase and localization translation rely on contributions from the community. The following people have contributed to ezBookkeeping: +

+
+ Project Maintainer +
+ @mayswind +
+
+

+ Code Contributors +

+ + + + + + + + + + + +
Contributor
+ + @{{ contributor }} + +
+

+ Translation Contributors +

+ + + + + + + + + + + + + + + +
TagLanguageContributors
{{ languageTag }}{{ getLanguageInfo(languageTag)?.displayName }} + + / +
+

+ ezBookkeeping also contains additional third party software and illustration.
+ All the third party software / illustration included or linked is redistributed under the terms and conditions of their original licenses.

-

{{ license.name }}
{{ license.copyright }} @@ -139,7 +196,7 @@ import { mdiWebRefresh } from '@mdi/js'; -const { tt } = useI18n(); +const { tt, getLanguageInfo } = useI18n(); const { clientVersion, clientVersionMatchServerVersion, @@ -148,6 +205,7 @@ const { isUserCustomExchangeRates, mapProviderName, mapProviderWebsite, + contributors, licenseLines, thirdPartyLicenses, refreshBrowserCache, @@ -156,3 +214,26 @@ const { init(); + + diff --git a/src/views/mobile/AboutPage.vue b/src/views/mobile/AboutPage.vue index 1b42ef6f..cfa69a04 100644 --- a/src/views/mobile/AboutPage.vue +++ b/src/views/mobile/AboutPage.vue @@ -49,10 +49,66 @@


- ezBookkeeping also contains additional third party software and illustration.
- All the third party software/illustration included or linked is redistributed under the terms and conditions of their original licenses. + ezBookkeeping's codebase and localization translation rely on contributions from the community. The following people have contributed to ezBookkeeping: +

+
+ Project Maintainer +
+ @mayswind +
+
+

+ Code Contributors +

+ + + + + + + + + + + +
Contributor
+ + @{{ contributor }} + +
+

+ Translation Contributors +

+ + + + + + + + + + + + + + + +
TagLanguageContributors
{{ languageTag }}{{ getLanguageInfo(languageTag)?.displayName }} + + / +
+

+ ezBookkeeping also contains additional third party software and illustration.
+ All the third party software / illustration included or linked is redistributed under the terms and conditions of their original licenses.

-

{{ license.name }}
{{ license.copyright }} @@ -81,7 +137,7 @@ import { useI18n } from '@/locales/helpers.ts'; import { useI18nUIComponents } from '@/lib/ui/mobile.ts'; import { useAboutPageBase } from '@/views/base/AboutPageBase.ts'; -const { tt } = useI18n(); +const { tt, getLanguageInfo } = useI18n(); const { showAlert, openExternalUrl } = useI18nUIComponents(); const { clientVersion, @@ -92,6 +148,7 @@ const { isUserCustomExchangeRates, mapProviderName, mapProviderWebsite, + contributors, licenseLines, thirdPartyLicenses, refreshBrowserCache, @@ -128,4 +185,25 @@ init(); .license-content { font-size: var(--ebk-license-content-font-size); } + +.contributors-table { + border-collapse: collapse; + + > thead > tr { + > th:not(:first-child) { + padding-inline-start: 10px; + } + + > th:not(:last-child) { + padding-inline-end: 10px; + } + } + + > thead > tr > th, + > tbody > tr > td { + padding: 4px 8px; + border: 1px solid var(--f7-list-item-border-color); + text-align: start; + } +} diff --git a/vite.config.ts b/vite.config.ts index 6e2a1ca5..6bc980f9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,6 +9,7 @@ import Checker from 'vite-plugin-checker'; import git from 'git-rev-sync'; import packageFile from './package.json'; +import contributorsFile from './contributors.json'; import thirdPartyLicenseFile from './third-party-dependencies.json'; const SRC_DIR = resolve(__dirname, './src'); @@ -75,6 +76,7 @@ export default defineConfig(() => { __EZBOOKKEEPING_VERSION__: JSON.stringify(packageFile.version), __EZBOOKKEEPING_BUILD_UNIX_TIME__: JSON.stringify(buildUnixTime), __EZBOOKKEEPING_BUILD_COMMIT_HASH__: JSON.stringify(git.short()), + __EZBOOKKEEPING_CONTRIBUTORS__: JSON.stringify(contributorsFile), __EZBOOKKEEPING_LICENSE__: JSON.stringify(licenseContent), __EZBOOKKEEPING_THIRD_PARTY_LICENSES__: JSON.stringify(thirdPartyLicenseFile) },