diff --git a/site/blog/authors.yml b/site/blog/authors.yml new file mode 100644 index 00000000..e897630b --- /dev/null +++ b/site/blog/authors.yml @@ -0,0 +1,6 @@ +vitonsky: + name: Robert Vitonsky + title: Founder of Linguist Translate + url: https://vitonsky.net + image_url: https://github.com/vitonsky.png + email: rob@vitonsky.net diff --git a/site/blog/release/6.0.0.md b/site/blog/release/6.0.0.md new file mode 100644 index 00000000..266620f2 --- /dev/null +++ b/site/blog/release/6.0.0.md @@ -0,0 +1,28 @@ +--- +title: Release 6.0.0 +description: Manifest V3 and sandboxed translators +authors: [vitonsky] +tags: [release] +date: 2024-06-25T16:00 +--- + +Key changes in [new release](https://github.com/translate-tools/linguist/releases/tag/v6.0.0). + +- Chrome extension moved to a Manifest v3 +- Custom translators code now run in sandboxed iframe with no access to addon API +- New option to disable translation history recording https://github.com/translate-tools/linguist/issues/151 +- Minor bug fixes and improvements, see [milestone](https://github.com/translate-tools/linguist/milestone/7?closed=1) + +**Full Changelog**: https://github.com/translate-tools/linguist/compare/v5.0.17...6.0.0 + +## Improved security + +Now custom translators executes in sandboxed context, so they no have access to addon API. + +Users now may use custom translators with lower trust level. Custom translator still may sent requests to any domains from your browser, and still may mine on your hardware as any other software, but custom translator can't inspect content on pages and do other things that browser extensions do. + +## Manifest V3 + +A chrome [announced](https://developer.chrome.com/blog/resuming-the-transition-to-mv3/#the_phase-out_timeline) they will deprecate and disable extensions with manifest v2 soon. So Linguist migrate to manifest v3 on Chrome and stay on manifest v2 on Firefox. + +Due to some limitations of Manifest V3, Linguist may not work on too old browsers like Chrome 109 and older. \ No newline at end of file diff --git a/site/docusaurus.config.ts b/site/docusaurus.config.ts index b1078452..ea76ae61 100644 --- a/site/docusaurus.config.ts +++ b/site/docusaurus.config.ts @@ -3,7 +3,7 @@ import type { Config } from '@docusaurus/types'; const config: Config = { title: 'Linguist Translate', tagline: 'Privacy focused translation', - favicon: 'favicon.svg', + favicon: 'favicon.ico', // Set the production url of your site here url: 'https://linguister.io', @@ -20,10 +20,46 @@ const config: Config = { // path: '../docs', // include: ['*.md', '*.mdx'], // }, - blog: false, + blog: { + blogTitle: 'Linguist Translate blog', + blogDescription: + 'A blog of Linguist Translate, the privacy focused translation in your browser', + postsPerPage: 'ALL', + blogSidebarCount: 0, + }, }, ], ], + + themeConfig: { + image: '/screenshots/page-translation.png', + colorMode: { + defaultMode: 'light', + disableSwitch: true, + respectPrefersColorScheme: true, + }, + navbar: { + logo: { + alt: 'Linguist Translate', + src: '/logo.svg', + srcDark: 'img/logo_dark.svg', + href: '/', + target: '_self', + width: 100, + }, + items: [ + { + href: 'https://github.com/translate-tools/linguist', + label: 'GitHub', + position: 'right', + target: '_blank', + }, + ], + }, + footer: { + copyright: `Copyright © ${new Date().getFullYear()} FluidMinds team. Built with Docusaurus.`, + }, + }, } satisfies Config; export default config; diff --git a/site/src/components/Analytics/AnalyticsProvider.tsx b/site/src/components/Analytics/AnalyticsProvider.tsx index c31fcec6..c596459a 100644 --- a/site/src/components/Analytics/AnalyticsProvider.tsx +++ b/site/src/components/Analytics/AnalyticsProvider.tsx @@ -1,14 +1,23 @@ import React, { PropsWithChildren, useCallback, useEffect, useState } from 'react'; import Plausible from 'plausible-tracker'; import { PlausibleInitOptions } from 'plausible-tracker/build/main/lib/tracker'; +import Head from '@docusaurus/Head'; import { analyticsContext, IAnalyticsContext } from './useAnalyticsContext'; +export type AnalyticsProviderProps = PropsWithChildren<{ + plausible: PlausibleInitOptions; + googleAnalytics: { + tagId: string; + }; +}>; + export const AnalyticsProvider = ({ - options, + plausible: plausibleOptions, + googleAnalytics, children, -}: PropsWithChildren<{ options: PlausibleInitOptions }>) => { - const [plausible] = useState(() => Plausible(options)); +}: AnalyticsProviderProps) => { + const [plausible] = useState(() => Plausible(plausibleOptions)); const trackEvent: IAnalyticsContext['trackEvent'] = useCallback( (eventName, props) => { @@ -51,6 +60,25 @@ export const AnalyticsProvider = ({ return ( + + + + -