Showing preview only (539K chars total). Download the full file or copy to clipboard to get everything.
Repository: ztjhz/ChatGPTFreeApp
Branch: main
Commit: fbc47ebccb56
Files: 279
Total size: 451.7 KB
Directory structure:
gitextract_eognuhoc/
├── .dockerignore
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ ├── deploy.yml
│ └── publish.yml
├── .gitignore
├── .prettierrc
├── Dockerfile
├── LICENSE
├── README-zh_CN.md
├── README.md
├── docker-compose.yml
├── electron/
│ └── index.cjs
├── index.html
├── package.json
├── postcss.config.cjs
├── public/
│ ├── CNAME
│ └── locales/
│ ├── da/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── de/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── en/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── en-US/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── es/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── fr/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── it/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── ja/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── ms/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── nb/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── ro/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── ru/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── sv/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── vi-VN/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── zh-CN/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ ├── zh-HK/
│ │ ├── about.json
│ │ ├── api.json
│ │ ├── drive.json
│ │ ├── main.json
│ │ └── model.json
│ └── zh-TW/
│ ├── about.json
│ ├── api.json
│ ├── drive.json
│ ├── main.json
│ └── model.json
├── src/
│ ├── App.tsx
│ ├── Roboto.css
│ ├── api/
│ │ ├── api.ts
│ │ ├── google-api.ts
│ │ └── helper.ts
│ ├── assets/
│ │ └── icons/
│ │ ├── AboutIcon.tsx
│ │ ├── ArrowBottom.tsx
│ │ ├── CalculatorIcon.tsx
│ │ ├── ChatIcon.tsx
│ │ ├── CloneIcon.tsx
│ │ ├── ColorPaletteIcon.tsx
│ │ ├── CopyIcon.tsx
│ │ ├── CrossIcon.tsx
│ │ ├── CrossIcon2.tsx
│ │ ├── DeleteIcon.tsx
│ │ ├── DownArrow.tsx
│ │ ├── DownChevronArrow.tsx
│ │ ├── EditIcon.tsx
│ │ ├── EditIcon2.tsx
│ │ ├── ExportIcon.tsx
│ │ ├── FileTextIcon.tsx
│ │ ├── FolderIcon.tsx
│ │ ├── GoogleIcon.tsx
│ │ ├── HeartIcon.tsx
│ │ ├── ImageIcon.tsx
│ │ ├── JsonIcon.tsx
│ │ ├── LinkIcon.tsx
│ │ ├── LogoutIcon.tsx
│ │ ├── MarkdownIcon.tsx
│ │ ├── MenuIcon.tsx
│ │ ├── MoneyIcon.tsx
│ │ ├── MoonIcon.tsx
│ │ ├── NewFolderIcon.tsx
│ │ ├── PdfIcon.tsx
│ │ ├── PersonIcon.tsx
│ │ ├── PlusIcon.tsx
│ │ ├── RefreshIcon.tsx
│ │ ├── SendIcon.tsx
│ │ ├── SettingIcon.tsx
│ │ ├── SpinnerIcon.tsx
│ │ ├── SunIcon.tsx
│ │ └── TickIcon.tsx
│ ├── components/
│ │ ├── AboutMenu/
│ │ │ ├── AboutMenu.tsx
│ │ │ └── index.ts
│ │ ├── ApiMenu/
│ │ │ ├── ApiMenu.tsx
│ │ │ └── index.ts
│ │ ├── ApiPopup/
│ │ │ ├── ApiPopup.tsx
│ │ │ └── index.ts
│ │ ├── Chat/
│ │ │ ├── Chat.tsx
│ │ │ ├── ChatContent/
│ │ │ │ ├── ChatContent.tsx
│ │ │ │ ├── ChatTitle.tsx
│ │ │ │ ├── CloneChat.tsx
│ │ │ │ ├── DownloadChat.tsx
│ │ │ │ ├── Message/
│ │ │ │ │ ├── Avatar.tsx
│ │ │ │ │ ├── CodeBlock.tsx
│ │ │ │ │ ├── CommandPrompt/
│ │ │ │ │ │ ├── CommandPrompt.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── Message.tsx
│ │ │ │ │ ├── MessageContent.tsx
│ │ │ │ │ ├── NewMessageButton.tsx
│ │ │ │ │ ├── RoleSelector.tsx
│ │ │ │ │ ├── View/
│ │ │ │ │ │ ├── Button/
│ │ │ │ │ │ │ ├── BaseButton.tsx
│ │ │ │ │ │ │ ├── CopyButton.tsx
│ │ │ │ │ │ │ ├── DeleteButton.tsx
│ │ │ │ │ │ │ ├── DownButton.tsx
│ │ │ │ │ │ │ ├── EditButton.tsx
│ │ │ │ │ │ │ ├── MarkdownModeButton.tsx
│ │ │ │ │ │ │ ├── RefreshButton.tsx
│ │ │ │ │ │ │ └── UpButton.tsx
│ │ │ │ │ │ ├── ContentView.tsx
│ │ │ │ │ │ └── EditView.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ScrollToBottomButton.tsx
│ │ │ │ └── index.ts
│ │ │ ├── ChatInput.tsx
│ │ │ └── index.ts
│ │ ├── ChatConfigMenu/
│ │ │ ├── ChatConfigMenu.tsx
│ │ │ └── index.ts
│ │ ├── ConfigMenu/
│ │ │ ├── ConfigMenu.tsx
│ │ │ └── index.ts
│ │ ├── GoogleSync/
│ │ │ ├── GoogleSync.tsx
│ │ │ ├── GoogleSyncButton.tsx
│ │ │ └── index.ts
│ │ ├── ImportExportChat/
│ │ │ ├── ExportChat.tsx
│ │ │ ├── ImportChat.tsx
│ │ │ ├── ImportChatOpenAI.tsx
│ │ │ ├── ImportExportChat.tsx
│ │ │ └── index.ts
│ │ ├── LanguageSelector/
│ │ │ ├── LanguageSelector.tsx
│ │ │ └── index.ts
│ │ ├── Menu/
│ │ │ ├── ChatFolder.tsx
│ │ │ ├── ChatHistory.tsx
│ │ │ ├── ChatHistoryList.tsx
│ │ │ ├── ChatSearch.tsx
│ │ │ ├── Menu.tsx
│ │ │ ├── MenuOptions/
│ │ │ │ ├── Account.tsx
│ │ │ │ ├── Api.tsx
│ │ │ │ ├── ClearConversation.tsx
│ │ │ │ ├── CollapseOptions.tsx
│ │ │ │ ├── Logout.tsx
│ │ │ │ ├── Me.tsx
│ │ │ │ ├── MenuOptions.tsx
│ │ │ │ ├── ThemeSwitcher.tsx
│ │ │ │ └── index.ts
│ │ │ ├── NewChat.tsx
│ │ │ ├── NewFolder.tsx
│ │ │ └── index.ts
│ │ ├── MobileBar/
│ │ │ ├── MobileBar.tsx
│ │ │ └── index.ts
│ │ ├── PopupModal/
│ │ │ ├── PopupModal.tsx
│ │ │ └── index.ts
│ │ ├── PromptLibraryMenu/
│ │ │ ├── ExportPrompt.tsx
│ │ │ ├── ImportPrompt.tsx
│ │ │ ├── PromptLibraryMenu.tsx
│ │ │ └── index.ts
│ │ ├── SearchBar/
│ │ │ ├── SearchBar.tsx
│ │ │ └── index.ts
│ │ ├── SettingsMenu/
│ │ │ ├── AdvencedModeToggle.tsx
│ │ │ ├── AutoTitleToggle.tsx
│ │ │ ├── EnterToSubmitToggle.tsx
│ │ │ ├── InlineLatexToggle.tsx
│ │ │ ├── SettingsMenu.tsx
│ │ │ ├── TotalTokenCost.tsx
│ │ │ └── index.ts
│ │ ├── ShareGPT/
│ │ │ ├── ShareGPT.tsx
│ │ │ └── index.ts
│ │ ├── StopGeneratingButton/
│ │ │ └── StopGeneratingButton.tsx
│ │ ├── Toast/
│ │ │ ├── Toast.tsx
│ │ │ └── index.ts
│ │ ├── Toggle/
│ │ │ ├── Toggle.tsx
│ │ │ └── index.ts
│ │ └── TokenCount/
│ │ ├── TokenCount.tsx
│ │ └── index.ts
│ ├── constants/
│ │ ├── auth.ts
│ │ ├── chat.ts
│ │ ├── color.ts
│ │ ├── language.ts
│ │ └── prompt.ts
│ ├── fonts/
│ │ └── LICENSE.txt
│ ├── hooks/
│ │ ├── useAddChat.ts
│ │ ├── useHideOnOutsideClick.ts
│ │ ├── useInitialiseNewChat.ts
│ │ ├── useSaveToLocalStorage.ts
│ │ └── useSubmit.ts
│ ├── i18n.ts
│ ├── main.css
│ ├── main.tsx
│ ├── store/
│ │ ├── auth-slice.ts
│ │ ├── chat-slice.ts
│ │ ├── cloud-auth-slice.ts
│ │ ├── cloud-auth-store.ts
│ │ ├── config-slice.ts
│ │ ├── input-slice.ts
│ │ ├── migrate.ts
│ │ ├── prompt-slice.ts
│ │ ├── storage/
│ │ │ └── GoogleCloudStorage.ts
│ │ ├── store.ts
│ │ └── toast-slice.ts
│ ├── types/
│ │ ├── api.ts
│ │ ├── chat.ts
│ │ ├── export.ts
│ │ ├── google-api.ts
│ │ ├── persist.ts
│ │ ├── prompt.ts
│ │ └── theme.ts
│ ├── utils/
│ │ ├── api.ts
│ │ ├── chat.ts
│ │ ├── date.ts
│ │ ├── downloadFile.ts
│ │ ├── google-api.ts
│ │ ├── import.ts
│ │ ├── messageUtils.ts
│ │ └── prompt.ts
│ └── vite-env.d.ts
├── tailwind.config.cjs
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
/.github
/Dockerfile
================================================
FILE: .github/FUNDING.yml
================================================
github: [ztjhz]
ko_fi: betterchatgpt
================================================
FILE: .github/workflows/deploy.yml
================================================
name: Deploy to GitHub Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: 'pages'
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v3
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: yarn
- name: Build website
run: yarn build
env:
VITE_GOOGLE_CLIENT_ID: ${{ secrets.GCLIENT }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: './dist'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
================================================
FILE: .github/workflows/publish.yml
================================================
name: Build and publish desktop app
on:
workflow_dispatch:
concurrency:
group: 'publish'
cancel-in-progress: true
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Use Node.js 18
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install dependencies
run: yarn
- name: Build
run: yarn make
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VITE_GOOGLE_CLIENT_ID: ${{ secrets.GCLIENT }}
================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
release/
.env
================================================
FILE: .prettierrc
================================================
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"jsxSingleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"arrowParens": "always",
"quoteProps": "consistent"
}
================================================
FILE: Dockerfile
================================================
FROM node:alpine
RUN addgroup -S appgroup && \
adduser -S appuser -G appgroup && \
mkdir -p /home/appuser/app && \
chown appuser:appgroup /home/appuser/app
USER appuser
RUN yarn config set prefix ~/.yarn && \
yarn global add serve
WORKDIR /home/appuser/app
COPY --chown=appuser:appgroup package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY --chown=appuser:appgroup . .
RUN yarn build
EXPOSE 3000
CMD ["/home/appuser/.yarn/bin/serve", "-s", "dist", "-l", "3000"]
================================================
FILE: LICENSE
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: README-zh_CN.md
================================================
<h1 align="center"><b>Better ChatGPT</b></h1>
<p align="center">
<a href="https://bettergpt.chat" target="_blank"><img src="public/apple-touch-icon.png" alt="Better ChatGPT" width="100" /></a>
</p>
<h4 align="center"><b>免费、无限、强大、智能、迷人</b></h4>
<p align="center">
<a href="https://github.com/ztjhz/BetterChatGPT/blob/main/LICENSE" target="_blank">
<img src="https://img.shields.io/github/license/ztjhz/BetterChatGPT?style=flat-square" alt="licence" />
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/fork" target="_blank">
<img src="https://img.shields.io/github/forks/ztjhz/BetterChatGPT?style=flat-square" alt="forks"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/stargazers" target="_blank">
<img src="https://img.shields.io/github/stars/ztjhz/BetterChatGPT?style=flat-square" alt="stars"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/issues" target="_blank">
<img src="https://img.shields.io/github/issues/ztjhz/BetterChatGPT?style=flat-square" alt="issues"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/pulls" target="_blank">
<img src="https://img.shields.io/github/issues-pr/ztjhz/BetterChatGPT?style=flat-square" alt="pull-requests"/>
</a>
<a href="https://twitter.com/intent/tweet?text=👋看看这个惊人的存储库%20https://github.com/ztjhz/BetterChatGPT,由%20@nikushii_%20创建。"><img src="https://img.shields.io/twitter/url?label=%E5%88%86%E4%BA%AB%E5%88%B0%E6%8E%A8%E7%89%B9&style=social&url=https%3A%2F%2Fgithub.com%2Fztjhz%2FBetterChatGPT"></a>
</p>
<p align="center">
<a href="https://bettergpt.chat">进入网站</a>
·
<a href="https://github.com/ztjhz/BetterChatGPT/issues/new/choose">反馈问题</a>
·
<a href="https://github.com/ztjhz/BetterChatGPT/issues/new/choose">请求功能</a>
</p>
<p align="center"><i>您喜欢使用 Better ChatGPT 吗?请给它一个星星以示支持!🌟</i></p>
## 👋🏻 介绍 Better ChatGPT
<p align="center">
<a href="https://bettergpt.chat" target="_blank">
<img src="assets/preview-zh_CN.png" alt="landing" width=500 />
</a>
</p>
您准备好使用 Better ChatGPT 充分发掘 ChatGPT 的潜力了吗?
Better ChatGPT 是任何想要体验对话型人工智能无限潜力的人的终极目的地。我们的应用程序利用 OpenAI 的 ChatGPT API 的全部潜力,提供了一个无与伦比的聊天机器人体验,而且完全免费,并且没有任何限制。
无论您是想与虚拟助手聊天、提高语言技能,还是想享受有趣而引人入胜的对话,我们的应用都能满足您的需求。那么,为什么还要等呢?立即加入我们,探索 Better ChatGPT 的精彩世界!
# 🔥 功能
Better ChatGPT 已经包含了大量的功能。您可以使用以下功能:
- 支持使用内置代理解決 ChatGPT 地区限制
- 支持自定义提示词资料库
- 支持使用文件夹(且带颜色)整理聊天
- 支持筛选聊天和文件夹
- 支持实时计算 token 数量和价格
- 支持使用 ShareGPT 分享聊天
- 支持自定义 API 参数(例如存在惩罚)
- 支持自定义用户/助理/系统身份
- 支持任意编辑/插入/调整消息顺序
- 支持自动生成聊天标题
- 支持自动保存聊天记录
- 支持导入/导出聊天记录
- 支持将聊天保存为 Markdown/图片/JSON
- 支持与 Google Drive 同步
- 支持 Azure OpenAI 终端
- 支持多语言 (i18n)
# 🛠️ 使用方法
要开始使用,只需访问我们的网站:<https://bettergpt.chat/>。您有 3 种方法可以开始使用 Better ChatGPT。
1. 在 API 菜单中输入您从 [OpenAI API Keys](https://platform.openai.com/account/api-keys) 获得的 OpenAI API 密钥。
2. 使用提供的 API 端点代理:[ayaka14732/ChatGPTAPIFree](https://github.com/ayaka14732/ChatGPTAPIFree)。(如果您所在的区域无法访问 ChatGPT)
3. 按照这里提供的说明托管自己的 API 端点:<https://github.com/ayaka14732/ChatGPTAPIFree>。随后,在 API 菜单中输入 API 端点。
## 桌面应用
在此下载桌面应用程序:<https://github.com/ztjhz/BetterChatGPT/releases/>
| 操作系统 | 下载 |
| -------- | --------- |
| Windows | .exe |
| MacOS | .dmg |
| Linux | .AppImage |
### 功能
- 无限本地存储
- 本地运行(即使无法访问 Better ChatGPT 网站也可以使用)
# 🛫 托管自己的实例
如果您想运行自己的 Better ChatGPT 实例,可以按照以下步骤轻松完成:
## Vercel
使用 Vercel 一键部署
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fztjhz%2FBetterChatGPT)
## GitHub 页面
### 步骤
1. 创建一个 GitHub 账户(如果您还没有账户)。
1. 给此[存储库](https://github.com/ztjhz/BetterChatGPT) 一个星星 ⭐️
1. Fork 此[存储库](https://github.com/ztjhz/BetterChatGPT)
1. 在 fork 之后的存储库中点击 `Settings` 选项卡

1. 在左侧边栏中,单击 `Pages` ,在右侧区域中,为 `Source` 选择 `GitHub Actions`。

1. 现在点击 `Actions`

1. 在左侧边栏中,点击 `Deploy to GitHub Pages`

1. 在运行的工作流列表上方,选择 `Run workflow` 。

1. 返回到 `Settings` 选项卡

1. 在左侧边栏中,单击 `Pages` 。然后在顶部部分,您可以看到 "Your site is live at `XXX`"。

### 在本地运行
1. 确保您已安装以下内容:
- [node.js](https://nodejs.org/en/)
- [yarn](https://yarnpkg.com/) 或者 [npm](https://www.npmjs.com/)
2. 通过运行 `git clone https://github.com/ztjhz/BetterChatGPT.git` 克隆此[存储库](https://github.com/ztjhz/BetterChatGPT)。
3. 进入目录通过 `cd BetterChatGPT`
4. 运行 `yarn` 或 `npm install`,具体取决于您是否安装了 yarn 或 npm。
5. 运行 `yarn dev` 或 `npm run dev` 来启动应用程序。
# ⭐️ 星星历史
[](https://github.com/ztjhz/BetterChatGPT/stargazers)
<h3 align="center">
给 <b>Better ChatGPT</b> 一个星星 ⭐️ 可以让它更加锦上添花,让更多人受益匪浅。
</h3>
# ❤️ 贡献者
感谢所有贡献者!
<a href="https://github.com/ztjhz/BetterChatGPT/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ztjhz/BetterChatGPT" />
</a>
# 🙏 支持
在 Better ChatGPT,我们致力于为您提供实用和惊人的功能。就像任何项目一样,您的支持和激励将对我们在保持前进方面起到至关重要的作用!
如果您喜欢使用我们的应用程序,我们恳请您给这个项目一颗 ⭐️。您的认可对我们意义重大,鼓励我们更加努力,以提供最佳的体验。
如果您想支持我们的团队,请考虑通过以下方法之一赞助我们。每一份贡献,无论多小,都有助于我们维护和改善我们的服务。
| 付款方式 | 链接 |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| 支付宝 (Ayaka) | <img src="https://ayaka14732.github.io/sponsor/alipay.jpg" width=150 /> |
| 微信 (Ayaka) | <img src="https://ayaka14732.github.io/sponsor/wechat.png" width=150 /> |
| GitHub | [](https://github.com/sponsors/ztjhz) |
| KoFi | [](https://ko-fi.com/betterchatgpt) |
感谢您成为我们社区的一员,我们期待着在未来为您提供更好的服务。
================================================
FILE: README.md
================================================
<h1 align="center"><b>Better ChatGPT</b></h1>
<p align="center">
English Version |
<a href="README-zh_CN.md">
简体中文版
</a>
</p>
<p align="center">
<a href="https://bettergpt.chat" target="_blank"><img src="public/apple-touch-icon.png" alt="Better ChatGPT" width="100" /></a>
</p>
<h4 align="center"><b>Free, Powerful, Limitless, Intelligent, Engaging</b></h4>
<p align="center">
<a href="https://github.com/ztjhz/BetterChatGPT/blob/main/LICENSE" target="_blank">
<img src="https://img.shields.io/github/license/ztjhz/BetterChatGPT?style=flat-square" alt="licence" />
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/fork" target="_blank">
<img src="https://img.shields.io/github/forks/ztjhz/BetterChatGPT?style=flat-square" alt="forks"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/stargazers" target="_blank">
<img src="https://img.shields.io/github/stars/ztjhz/BetterChatGPT?style=flat-square" alt="stars"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/issues" target="_blank">
<img src="https://img.shields.io/github/issues/ztjhz/BetterChatGPT?style=flat-square" alt="issues"/>
</a>
<a href="https://github.com/ztjhz/BetterChatGPT/pulls" target="_blank">
<img src="https://img.shields.io/github/issues-pr/ztjhz/BetterChatGPT?style=flat-square" alt="pull-requests"/>
</a>
<a href="https://twitter.com/intent/tweet?text=👋%20Check%20this%20amazing%20repo%20https://github.com/ztjhz/BetterChatGPT,%20created%20by%20@nikushii_"><img src="https://img.shields.io/twitter/url?label=Share%20on%20Twitter&style=social&url=https%3A%2F%2Fgithub.com%2Fztjhz%2FBetterChatGPT"></a>
</p>
<p align="center">
<a href="https://bettergpt.chat">Enter Website</a>
·
<a href="https://github.com/ztjhz/BetterChatGPT/issues/new/choose">Report Bug</a>
·
<a href="https://github.com/ztjhz/BetterChatGPT/issues/new/choose">Request Feature</a>
</p>
<p align="center"><i>Did you enjoy using Better ChatGPT? Give it some love with a star! 🌟</i></p>
## 👋🏻 Introducing Better ChatGPT
<p align="center">
<a href="https://bettergpt.chat" target="_blank">
<img src="assets/preview.png" alt="landing" width=500 />
</a>
</p>
Are you ready to unlock the full potential of ChatGPT with Better ChatGPT?
Better ChatGPT is the ultimate destination for anyone who wants to experience the limitless power of conversational AI. With no limits and completely free to use for all, our app harnesses the full potential of OpenAI's ChatGPT API to offer you an unparalleled chatbot experience.
Whether you're looking to chat with a virtual assistant, improve your language skills, or simply enjoy a fun and engaging conversation, our app has got you covered. So why wait? Join us today and explore the exciting world of Better ChatGPT!
# 🔥 Features
Better ChatGPT comes with a bundle of amazing features! Here are some of them:
- Proxy to bypass ChatGPT regional restrictions
- Prompt library
- Organize chats into folders (with colours)
- Filter chats and folders
- Token count and pricing
- ShareGPT integration
- Custom model parameters (e.g. presence_penalty)
- Chat as user / assistant / system
- Edit, reorder and insert any messages, anywhere
- Chat title generator
- Save chat automatically to local storage
- Import / Export chat
- Download chat (markdown / image / json)
- Sync to Google Drive
- Azure OpenAI endpoint support
- Multiple language support (i18n)
# 🛠️ Usage
To get started, simply visit our website at <https://bettergpt.chat/>. There are 3 ways for you to start using Better ChatGPT.
1. Enter into the API menu your OpenAI API Key obtained from [OpenAI API Keys](https://platform.openai.com/account/api-keys).
2. Utilise the api endpoint proxy provided by [ayaka14732/ChatGPTAPIFree](https://github.com/ayaka14732/ChatGPTAPIFree) (if you are in a region with no access to ChatGPT)
3. Host your own API endpoint by following the instructions provided here: <https://github.com/ayaka14732/ChatGPTAPIFree>. Subsequently, enter the API endpoint into the API menu.
## Desktop App
Download the desktop app [here](https://github.com/ztjhz/BetterChatGPT/releases)
| OS | Download |
| ------- | --------- |
| Windows | .exe |
| MacOS | .dmg |
| Linux | .AppImage |
### Features:
- Unlimited local storage
- Runs locally (access Better ChatGPT even if the website is not accessible)
# 🛫 Host your own Instance
If you'd like to run your own instance of Better ChatGPT, you can easily do so by following these steps:
## Vercel
One click deploy with Vercel
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fztjhz%2FBetterChatGPT)
## GitHub Pages
### Steps
1. Create a GitHub account (if you don't have one already)
1. Star this [repository](https://github.com/ztjhz/BetterChatGPT) ⭐️
1. Fork this [repository](https://github.com/ztjhz/BetterChatGPT)
1. In your forked repository, navigate to the `Settings` tab

1. In the left sidebar, click on `Pages` and in the right section, select `GitHub Actions` for `source`.

1. Now, click on `Actions`

1. In the left sidebar, click on `Deploy to GitHub Pages`

1. Above the list of workflow runs, select `Run workflow`.

1. Navigate back to the `Settings` tab

1. In the left sidebar, click on `Pages` and in the right section. Then at the top section, you can see that "Your site is live at `XXX`".

### Running it locally
1. Ensure that you have the following installed:
- [node.js](https://nodejs.org/en/) (v14.18.0 or above)
- [yarn](https://yarnpkg.com/) or [npm](https://www.npmjs.com/) (6.14.15 or above)
2. Clone this [repository](https://github.com/ztjhz/BetterChatGPT) by running `git clone https://github.com/ztjhz/BetterChatGPT.git`
3. Navigate into the directory by running `cd BetterChatGPT`
4. Run `yarn` or `npm install`, depending on whether you have yarn or npm installed.
5. Launch the app by running `yarn dev` or `npm run dev`
### Running it locally using docker compose
1. Ensure that you have the following installed:
- [docker](https://www.docker.com/) (v24.0.7 or above)
```bash
curl https://get.docker.com | sh \
&& sudo usermod -aG docker $USER
```
2. Build the docker image
```
docker compose build
```
3. Build and start the container using docker compose
```
docker compose build
docker compose up -d
```
4. Stop the container
```
docker compose down
```
# ⭐️ Star History
[](https://github.com/ztjhz/BetterChatGPT/stargazers)
<h3 align="center">
A ⭐️ to <b>Better ChatGPT</b> is to make it shine brighter and benefit more people.
</h3>
# ❤️ Contributors
Thanks to all the contributors!
<a href="https://github.com/ztjhz/BetterChatGPT/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ztjhz/BetterChatGPT" />
</a>
# 🙏 Support
At Better ChatGPT, we strive to provide you with useful and amazing features around the clock. And just like any project, your support and motivation will be instrumental in helping us keep moving forward!
If you have enjoyed using our app, we kindly ask you to give this project a ⭐️. Your endorsement means a lot to us and encourages us to work harder towards delivering the best possible experience.
If you would like to support the team, consider sponsoring us through one of the methods below. Every contribution, no matter how small, helps us to maintain and improve our service.
| Payment Method | Link |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| GitHub | [](https://github.com/sponsors/ztjhz) |
| KoFi | [](https://ko-fi.com/betterchatgpt) |
| Alipay (Ayaka) | <img src="https://ayaka14732.github.io/sponsor/alipay.jpg" width=150 /> |
| Wechat (Ayaka) | <img src="https://ayaka14732.github.io/sponsor/wechat.png" width=150 /> |
Thank you for being a part of our community, and we look forward to serving you better in the future.
================================================
FILE: docker-compose.yml
================================================
version: '3.4'
services:
ui_dev:
restart: always
image: better-chat-gpt
build:
context: ./
ports:
- 5173:3000
================================================
FILE: electron/index.cjs
================================================
const path = require('path');
const {
app,
shell,
clipboard,
dialog,
download,
BrowserWindow,
Tray,
Menu,
MenuItem,
} = require('electron');
const isDev = require('electron-is-dev');
const { autoUpdater } = require('electron-updater');
let win = null;
const instanceLock = app.requestSingleInstanceLock();
const isMacOS = process.platform === 'darwin';
if (require('electron-squirrel-startup')) app.quit();
const PORT = isDev ? '5173' : '51735';
const ICON = 'icon-rounded.png';
const ICON_TEMPLATE = 'iconTemplate.png';
const setupLinksLeftClick = (win) => {
win.webContents.setWindowOpenHandler(({ url }) => {
shell.openExternal(url);
return { action: 'deny' };
});
};
const setupContextMenu = (win) => {
win.webContents.on('context-menu', (_, params) => {
const { x, y, linkURL, selectionText } = params;
const template = [
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' },
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
{ role: 'pasteAndMatchStyle' },
{ role: 'delete' },
{ type: 'separator' },
{ role: 'selectAll' },
{ type: 'separator' },
{ role: 'toggleDevTools' },
];
const spellingMenu = [];
if (selectionText && !linkURL) {
// Add each spelling suggestion
for (const suggestion of params.dictionarySuggestions) {
spellingMenu.push(
new MenuItem({
label: suggestion,
click: () => win.webContents.replaceMisspelling(suggestion),
})
);
}
// Allow users to add the misspelled word to the dictionary
if (params.misspelledWord) {
spellingMenu.push(
new MenuItem({
label: 'Add to dictionary',
click: () =>
win.webContents.session.addWordToSpellCheckerDictionary(
params.misspelledWord
),
})
);
}
if (spellingMenu.length > 0) {
spellingMenu.push({ type: 'separator' });
}
template.push(
{ type: 'separator' },
{
label: `Search Google for "${selectionText}"`,
click: () => {
shell.openExternal(
`https://www.google.com/search?q=${encodeURIComponent(
selectionText
)}`
);
},
},
{
label: `Search DuckDuckGo for "${selectionText}"`,
click: () => {
shell.openExternal(
`https://duckduckgo.com/?q=${encodeURIComponent(selectionText)}`
);
},
}
);
}
if (linkURL) {
template.push(
{ type: 'separator' },
{
label: 'Open Link in Browser',
click: () => {
shell.openExternal(linkURL);
},
},
{
label: 'Copy Link Address',
click: () => {
clipboard.writeText(linkURL);
},
},
{
label: 'Save Link As...',
click: () => {
dialog.showSaveDialog(
win,
{ defaultPath: path.basename(linkURL) },
(filePath) => {
if (filePath) {
download(win, linkURL, { filename: filePath });
}
}
);
},
}
);
}
Menu.buildFromTemplate([...spellingMenu, ...template]).popup({
window: win,
x,
y,
});
});
};
function createWindow() {
autoUpdater.checkForUpdatesAndNotify();
win = new BrowserWindow({
autoHideMenuBar: true,
show: false,
icon: assetPath(ICON),
});
createTray(win);
win.maximize();
win.show();
isDev || createServer();
win.loadURL(`http://localhost:${PORT}`);
if (isDev) {
win.webContents.openDevTools({ mode: 'detach' });
}
setupLinksLeftClick(win);
setupContextMenu(win);
return win;
}
const assetPath = (asset) => {
return path.join(
__dirname,
isDev ? `../public/${asset}` : `../dist/${asset}`
);
};
const createTray = (win) => {
const tray = new Tray(assetPath(!isMacOS ? ICON : ICON_TEMPLATE));
const contextMenu = Menu.buildFromTemplate([
{
label: 'Show',
click: () => {
win.maximize();
win.show();
},
},
{
label: 'Exit',
click: () => {
app.isQuiting = true;
app.quit();
},
},
]);
tray.on('click', () => {
win.maximize();
win.show();
});
tray.setToolTip('Better ChatGPT');
tray.setContextMenu(contextMenu);
return tray;
};
app.on('window-all-closed', () => {
if (!isMacOS) {
app.quit();
}
});
process.on('uncaughtException', (error) => {
// Perform any necessary cleanup tasks here
dialog.showErrorBox('An error occurred', error.stack);
// Exit the app
process.exit(1);
});
if (!instanceLock) {
app.quit();
} else {
app.on('second-instance', (event, commandLine, workingDirectory) => {
if (win) {
if (win.isMinimized()) win.restore();
win.focus();
}
});
app.whenReady().then(() => {
win = createWindow();
});
}
const createServer = () => {
// Dependencies
const http = require('http');
const fs = require('fs');
const path = require('path');
// MIME types for different file extensions
const mimeTypes = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'text/javascript',
'.wasm': 'application/wasm',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.gif': 'image/gif',
'.svg': 'image/svg+xml',
'.json': 'application/json',
};
// Create a http server
const server = http.createServer((request, response) => {
// Get the file path from the URL
let filePath =
request.url === '/'
? `${path.join(__dirname, '../dist/index.html')}`
: `${path.join(__dirname, `../dist/${request.url}`)}`;
// Get the file extension from the filePath
let extname = path.extname(filePath);
// Set the default MIME type to text/plain
let contentType = 'text/plain';
// Check if the file extension is in the MIME types object
if (extname in mimeTypes) {
contentType = mimeTypes[extname];
}
// Read the file from the disk
fs.readFile(filePath, (error, content) => {
if (error) {
// If file read error occurs
if (error.code === 'ENOENT') {
// File not found error
response.writeHead(404);
response.end('File Not Found');
} else {
// Server error
response.writeHead(500);
response.end(`Server Error: ${error.code}`);
}
} else {
// File read successful
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
});
// Listen for request on port ${PORT}
server.listen(PORT, () => {
console.log(`Server listening on http://localhost:${PORT}/`);
});
};
================================================
FILE: index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png" />
<meta property="og:image" content="https://bettergpt.chat/social.png" />
<meta name="twitter:image" content="https://bettergpt.chat/social.png" />
<meta
name="description"
content="Play and chat smarter with BetterChatGPT - an amazing open-source web app with a better UI for exploring OpenAI's ChatGPT API! "
/>
<meta
name="twitter:description"
content="Play and chat smarter with BetterChatGPT - an amazing open-source web app with a better UI for exploring OpenAI's ChatGPT API! "
/>
<meta name="twitter:title" content="Better ChatGPT" />
<meta name="twitter:card" content="summary_large_image" />
<title>Better ChatGPT</title>
</head>
<body>
<div id="root"></div>
<div id="modal-root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
================================================
FILE: package.json
================================================
{
"name": "better-chatgpt",
"private": true,
"version": "1.0.5",
"type": "module",
"homepage": "./",
"main": "electron/index.cjs",
"author": "Jing Hua <betterchatgpt@mail.tjh.sg>",
"description": "Play and chat smarter with BetterChatGPT - an amazing open-source web app with a better UI for exploring OpenAI's ChatGPT API!",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"electron": "concurrently -k \"BROWSER=none yarn dev\" \"wait-on tcp:5173 && electron .\"",
"pack": "yarn build && electron-builder --dir",
"make": "yarn build && electron-builder"
},
"build": {
"appId": "better-chatgpt",
"productName": "Better ChatGPT",
"artifactName": "${os}-${name}-${version}-${arch}.${ext}",
"directories": {
"output": "release"
},
"dmg": {
"title": "${productName} ${version}",
"icon": "dist/icon-rounded-macos.png"
},
"mac": {
"icon": "dist/icon-rounded-macos.png"
},
"linux": {
"target": [
"tar.gz",
"AppImage"
],
"category": "Chat",
"icon": "dist/icon-rounded.png"
},
"win": {
"target": "NSIS",
"icon": "dist/icon-rounded.png"
}
},
"dependencies": {
"@dqbd/tiktoken": "^1.0.2",
"@react-oauth/google": "^0.9.0",
"electron-is-dev": "^2.0.0",
"electron-squirrel-startup": "^1.0.0",
"electron-updater": "^5.3.0",
"html2canvas": "^1.4.1",
"i18next": "^22.4.11",
"i18next-browser-languagedetector": "^7.0.1",
"i18next-http-backend": "^2.1.1",
"jspdf": "^2.5.1",
"katex": "^0.16.4",
"lodash": "^4.17.21",
"match-sorter": "^6.3.1",
"papaparse": "^5.4.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-i18next": "^12.2.0",
"react-markdown": "^8.0.5",
"react-scroll-to-bottom": "^4.2.0",
"rehype-highlight": "^6.0.0",
"rehype-katex": "^6.0.2",
"remark-gfm": "^3.0.1",
"remark-math": "^5.1.1",
"uuid": "^9.0.0",
"zustand": "^4.3.6"
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.9",
"@types/lodash": "^4.14.192",
"@types/papaparse": "^5.3.7",
"@types/react": "^18.0.27",
"@types/react-dom": "^18.0.10",
"@types/react-scroll-to-bottom": "^4.2.0",
"@types/uuid": "^9.0.1",
"@vitejs/plugin-react-swc": "^3.0.0",
"autoprefixer": "^10.4.13",
"concurrently": "^8.0.1",
"electron": "^23.2.0",
"electron-builder": "^23.6.0",
"postcss": "^8.4.21",
"tailwindcss": "^3.2.7",
"typescript": "^4.9.3",
"vite": "^4.1.0",
"vite-plugin-top-level-await": "^1.3.0",
"vite-plugin-wasm": "^3.2.2",
"wait-on": "^7.0.1"
}
}
================================================
FILE: postcss.config.cjs
================================================
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
================================================
FILE: public/CNAME
================================================
bettergpt.chat
================================================
FILE: public/locales/da/about.json
================================================
{
"description": "Better ChatGPT er en fantastisk open-source webapp, der giver dig mulighed for at lege med OpenAI's ChatGPT API gratis!",
"sourceCode": "Tjek <0>kildekoden</0> ud på GitHub og giv den en ⭐️!",
"initiative": {
"description": "Tjek <0><i>Open ChatGPT-initiativet</i></0> ud!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Support",
"paragraph1": "Hos Better ChatGPT stræber vi efter at give dig nyttige og fantastiske funktioner døgnet rundt. Og ligesom ethvert projekt vil din støtte og motivation være afgørende for at hjælpe os med at fortsætte fremad!",
"paragraph2": "Hvis du har nydt at bruge vores app, vil vi venligt bede dig om at give dette <0>projekt</0> en ⭐️. Din anerkendelse betyder meget for os og opmuntrer os til at arbejde hårdere mod at levere den bedst mulige oplevelse.",
"paragraph3": "Hvis du gerne vil støtte teamet, kan du overveje at sponsorere os gennem en af metoderne nedenfor. Hver bidrag, uanset hvor lille, hjælper os med at vedligeholde og forbedre vores service.",
"paragraph4": "Tak fordi du er en del af vores fællesskab, og vi ser frem til at betjene dig bedre i fremtiden.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "Vi inviterer dig til at deltage i vores Discord fællesskab! Vores Discord server er et fantastisk sted at udveksle ChatGPT idéer og tips samt indsende funktionsforespørgsler til Better ChatGPT. Du får mulighed for at interagere med udviklerne bag Better ChatGPT samt andre AI-entusiaster, der deler din passion.",
"paragraph2": "For at deltage i vores server skal du blot klikke på følgende link: <0>https://discord.gg/g3Qnwy4V6A</0>. Vi glæder os til at se dig der!"
},
"privacyStatement": {
"title": "Privatlivserklæring",
"paragraph1": "Vi værdsætter dit privatliv meget og er engageret i at beskytte vores brugeres privatliv. Vi indsamler eller gemmer ikke nogen tekst, du indtaster eller modtager fra OpenAI-serveren, i nogen form. Vores kildekode er tilgængelig for din inspektion for at verificere denne udtalelse.",
"paragraph2": "Vi prioriterer sikkerheden af din API-nøgle og håndterer den med største omhu. Hvis du bruger din egen API-nøgle, opbevares din nøgleeksklusivt på din browser og deles aldrig med nogen tredjeparts enhed. Den bruges udelukkende til det tilsigtede formål at få adgang til OpenAI API og ikke til anden uautoriseret brug."
}
}
================================================
FILE: public/locales/da/api.json
================================================
{
"securityMessage": "Vi prioriterer sikkerheden af din API-nøgle og håndterer den med største omhu. Din nøgle opbevares udelukkende på din browser og deles aldrig med tredjeparts enheder. Den bruges udelukkende til det tilsigtede formål at få adgang til OpenAI API og ikke til nogen anden uautoriseret brug.",
"apiEndpoint": {
"inputLabel": "API-endepunkt",
"description": "Når du vælger et uofficielt API-endepunkt, fungerer det som en proxy. En proxy fungerer ved at fungere som et mellemled mellem din enhed og destinationsserveren, i dette tilfælde OpenAI API. Ved at gøre dette, gør det det muligt for dig at få adgang til OpenAI API i regioner, hvor det ellers kan være begrænset.",
"warn": "Derudover, hvis du angiver et brugerdefineret API-endepunkt, der giver gratis adgang til OpenAI API, kan du bruge ChatGPT uden at skulle angive en API-nøgle ved blot at lade API-nøglefeltet være tomt. Det er dog afgørende at være forsigtig, når du bruger tredjeparts API-endepunkter, da utroværdige kan logge dine personlige oplysninger i samtalerne. Verificér altid pålideligheden af et API-endepunkt, før du bruger det for at beskytte dit privatliv og din sikkerhed."
},
"apiKey": {
"howTo": "Få din personlige API-nøgle <0>her</0>.",
"inputLabel": "API-nøgle"
},
"customEndpoint": "Brug brugerdefineret API-endepunkt",
"advancedConfig": "Se avanceret API-konfiguration <0>her</0>",
"noApiKeyWarning": "Ingen API-nøgle angivet! Tjek venligst dine API-indstillinger."
}
================================================
FILE: public/locales/da/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/da/main.json
================================================
{
"save": "Gem",
"generate": "Generere",
"cancel": "Annuller",
"confirm": "Bekræft",
"warning": "Advarsel",
"clearMessageWarning": "Vær opmærksom på, at ved at indsende denne besked vil alle efterfølgende beskeder blive slettet!",
"clearConversationWarning": "Vær opmærksom på, at ved at bekræfte denne handling vil alle beskeder blive slettet!",
"clearConversation": "Ryd samtale",
"import": "Importer",
"export": "Eksporter",
"author": "Lavet af Jing Hua",
"about": "Om & Sponsor",
"api": "API",
"personal": "Personlig",
"free": "Gratis",
"downloadChat": "Download chat",
"user": "Bruger",
"assistant": "Assistent",
"system": "System",
"newChat": "Ny chat",
"lightMode": "Lys tilstand",
"darkMode": "Mørk tilstand",
"setting": "Indstillinger",
"image": "Billede",
"autoTitle": "Auto generer titel",
"advancedMode": "Avanceret tilstand",
"inlineLatex": "Indlejret LaTeX",
"prompt": "Opgave",
"promptLibrary": "Opgavebibliotek",
"name": "Navn",
"search": "Søg",
"total": "Total",
"resetCost": "Nulstil Omkostninger",
"countTotalTokens": "Tæl totale tokens",
"morePrompts": "Du kan finde flere opgaver her: ",
"clearPrompts": "Ryd prompter",
"postOnShareGPT": {
"title": "Indlæg på ShareGPT",
"warning": "Vær opmærksom på, at ved at poste din samtale på ShareGPT, vil den blive offentligt tilgængelig og synlig for alle. Når den er postet, kan samtalen ikke skjules eller slettes og kan blive arkiveret eller delt af andre. Vi råder dig til at overveje nøje og undgå at dele følsomme eller private oplysninger på denne platform."
},
"newFolder": "Ny mappe",
"cloneChat": "Klon Chat",
"cloned": "Klonet",
"enterToSubmit": "Tryk Enter for at sende",
"submitPlaceholder": "Skriv en besked eller klik på [/] for opgave..."
}
================================================
FILE: public/locales/da/model.json
================================================
{
"configuration": "Konfiguration",
"model": "Model",
"token": {
"label": "Max Token",
"description": "Det maksimale antal tokens der skal genereres i chat-fuldførelsen. Den samlede længde af input tokens og genererede tokens er begrænset af modellens kontekstlængde."
},
"default": "Standard",
"temperature": {
"label": "Temperatur",
"description": "Hvilken samplingstemperatur der skal bruges, mellem 0 og 2. Højere værdier som 0,8 vil gøre outputtet mere tilfældigt, mens lavere værdier som 0,2 vil gøre det mere fokuseret og deterministisk. Vi anbefaler generelt at ændre dette eller top p, men ikke begge. (Standard: 1)"
},
"presencePenalty": {
"label": "Tilstedeværelsesstraf",
"description": "Tal mellem -2,0 og 2,0. Positive værdier straffer nye tokens baseret på, om de vises i teksten hidtil, hvilket øger modellens sandsynlighed for at tale om nye emner. (Standard: 0)"
},
"topP": {
"label": "Top-p",
"description": "Tal mellem 0 og 1. Et alternativ til prøvetagning med temperatur, kaldet nucleus sampling, hvor modellen overvejer resultaterne af tokens med top p sandsynlighedsmasse. Så 0,1 betyder, at kun tokens, der udgør de øverste 10% sandsynlighedsmasse, overvejes. Vi anbefaler generelt at ændre dette eller temperaturen, men ikke begge. (Standard: 1)"
},
"frequencyPenalty": {
"label": "Frekvensstraf",
"description": "Tal mellem -2,0 og 2,0. Positive værdier straffer nye tokens baseret på deres eksisterende frekvens i teksten hidtil, hvilket nedsætter modellens sandsynlighed for at gentage den samme linje ordret. (Standard: 0)"
},
"defaultChatConfig": "Standard Chat-konfiguration",
"defaultSystemMessage": "Standard Systembesked",
"resetToDefault": "Nulstil til standard"
}
================================================
FILE: public/locales/de/about.json
================================================
{
"description": "Better ChatGPT ist eine großartige open-source web app, welche es ermöglicht mit der ChatGPT API von OpenAI zu interagieren!",
"sourceCode": "Sieh dir den <0>source code</0> auf GitHub an und ⭐️ das Projekt!",
"initiative": {
"description": "Schau dir die <0><i>Open ChatGPT Initiative</i></0> an!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Support",
"paragraph1": "Unser Team arbeitet rund um die Uhr an neuen Features und Funktionen. Und wie bei jedem Projekt wird deine Unterstützung und Motivation entscheidend dazu beitragen, uns vorwärts zu bringen!",
"paragraph2": "Wenn dir Nutzen und Gefallen an Better ChatGPT findest, dann bitte gib unserem <0>Projekt</0> einen ⭐️. Deine Unterstützung bedeutet uns viel und motiviert uns dazu, noch härter zu arbeiten, um das Projekt voran zu bringen.",
"paragraph3": "Wenn du das Team unterstützen möchtest, wäre es super, uns durch eine der unten aufgeführten Methoden zu sponsern. Jeder Beitrag, egal wie klein, hilft uns dabei, unseren Service zu erhalten und zu verbessern.",
"paragraph4": "Vielen Dank, dass du ein Teil unserer Community bist. Wir freuen uns darauf, bald mehr Features zu präsentieren und das Projekt zu erweitern.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "Tritt unserer Discord-Community bei! Unser Server ist ein großartiger Ort, um Ideen und Tipps für ChatGPT auszutauschen und Feature-Anfragen für Better ChatGPT einzureichen. Du hast die Möglichkeit, mit den Entwicklern hinter Better ChatGPT sowie anderen KI-Enthusiasten zu interagieren, die deine und unsere Leidenschaft teilen.",
"paragraph2": "Um dem Server beizutreten, klick auf den folgenden Link: <0>https://discord.gg/g3Qnwy4V6A</0>. Wir freuen uns auf dich!"
},
"privacyStatement": {
"title": "Datenschutzerklärung",
"paragraph1": "Wir legen großen Wert auf deine Privatsphäre und verpflichten uns, die Privatsphäre all unserer Benutzer zu schützen. Weder sammeln noch speichern wir die Texte die du eingibst oder von den OpenAI-Servern empfängst. Unsere Quellcode ist öffentlich einsehbar, damit du das auch überprüfen kannst.",
"paragraph2": "Die Sicherheit deines API-Schlüssels ist unsere höchste Priorität. Dieser wird ausschließlich lokal in deinem Browser gespeichert und niemals mit irgendeiner Drittpartei geteilt. Er wird ausschließlich für den vorgesehenen Zweck des Zugriffs auf die OpenAI-API verwendet und nicht für andere Zwecke."
}
}
================================================
FILE: public/locales/de/api.json
================================================
{
"securityMessage": "Die Sicherheit deines API-Schlüssels ist unsere höchste Priorität. Dieser wird ausschließlich lokal in deinem Browser gespeichert und niemals mit irgendeiner Drittpartei geteilt. Er wird ausschließlich für den vorgesehenen Zweck des Zugriffs auf die OpenAI-API verwendet und nicht für andere Zwecke.",
"apiEndpoint": {
"inputLabel": "API Endpunkt",
"description": "Wenn du einen inoffiziellen API-Endpunkt auswählst, funktioniert er als Proxy. Ein Proxy fungiert als Vermittler zwischen deinem Gerät und dem Zielserver, in diesem Fall der OpenAI-API. Auf diese Weise ist es möglich, auf die OpenAI-API zuzugreifen, auch in Regionen, in denen der Zugriff normalerweise eingeschränkt ist.",
"warn": "Wenn du einen benutzerdefinierten API-Endpunkt verwendest, der kostenlosen Zugriff auf die OpenAI-API gewährt, kannst du ChatGPT ohne die Angabe eines API-Schlüssels nutzen, indem du das API-Schlüssel-Feld einfach leer lässt. Es ist jedoch wichtig, bei der Verwendung von API-Endpunkten von Drittanbietern vorsichtig zu sein, da unzuverlässige Endpunkte deine persönlichen Informationen in den Gesprächen protokollieren können. Überprüfe immer die Zuverlässigkeit eines API-Endpunkts, bevor du ihn verwendest, um deine Privatsphäre und Sicherheit zu schützen."
},
"apiKey": {
"howTo": "Besorge dir <0>hier</0> deinen eigenen API-Schlüssel.",
"inputLabel": "API-Schlüssel"
},
"customEndpoint": "Verwende einen benutzerdefinierten API-Endpunkt",
"advancedConfig": "Sieh dir die <0>erweiterten API Konfigurationen</0> an",
"noApiKeyWarning": "Kein API-Schlüssel angegeben! Überprüfe bitte deine API-Einstellungen."
}
================================================
FILE: public/locales/de/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Synchronisiere deine Chat-Verläufe und Einstellungen einfach mit Google Drive.",
"button": {
"sync": "Jetzt synchronisieren",
"stop": "Synchronisation stoppen",
"create": "Neue Datei anlegen",
"confirm": "Auswahl bestätigen"
},
"notice": "Hinweis: Du musst dich bei jedem Besuch oder jede Stunde erneut anmelden. Verwende Better ChatGPT nicht gleichzeitig auf mehr als einem Gerät, um zu vermeiden, dass deine Cloud-Daten überschrieben werden.",
"privacy": "Deine Privatsphäre ist uns wichtig und um sie zu schützen, hat Better ChatGPT nur limitierten Zugriff. Das bedeutet, dass Better ChatGPT nur die eigenen Dateien und Ordner erstellen, anzeigen und verwalten kann.",
"toast": {
"sync": "Synchronisation erfolgreich!",
"stop": "Synchronisation angehalten"
}
}
================================================
FILE: public/locales/de/main.json
================================================
{
"save": "Speichern",
"generate": "Generieren",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"warning": "Achtung",
"clearMessageWarning": "Bitte beachte, dass durch das Einreichen dieser neuen Nachricht alle nachfolgenden Nachrichten gelöscht werden!",
"clearConversationWarning": "Bitte beachte, dass bei Bestätigung dieser Aktion alle Nachrichten gelöscht werden!",
"clearConversation": "Chat-Verlauf löschen.",
"import": "Importieren",
"export": "Exportieren",
"author": "Made by Jing Hua",
"about": "Über uns & Sponsor",
"api": "API",
"personal": "Persönlich",
"free": "Kostenlos",
"downloadChat": "Chat downloaden",
"user": "Nutzer",
"assistant": "Assistent",
"system": "System",
"newChat": "Neuer Chat",
"lightMode": "Heller Modus",
"darkMode": "Dunkler Modus",
"setting": "Einstellungen",
"image": "Bild",
"autoTitle": "Chat-Titel automatisch generieren",
"advancedMode": "Erweiterter Modus",
"inlineLatex": "Inline Latex",
"prompt": "Prompt",
"promptLibrary": "Prompt Bibliothek",
"name": "Name",
"search": "Suche",
"total": "Gesamt",
"resetCost": "Kosten zurücksetzen",
"countTotalTokens": "Gesamte Tokens zusammenrechnen",
"morePrompts": "Du findest mehr Prompts hier: ",
"clearPrompts": "Prompts löschen",
"postOnShareGPT": {
"title": "Auf ShareGPT teilen",
"warning": "Bitte beachte, dass durch das Posten deiner Konversation auf ShareGPT diese öffentlich zugänglich und für jeden einsehbar wird. Einmal veröffentlicht, kann die Konversation nicht mehr versteckt oder gelöscht werden und kann möglicherweise von anderen archiviert oder geteilt werden. Wir raten dir daher, sorgfältig zu drüber nachzudenken ob du die Konversation teilst. Vermeide grundsätzlich sensible oder private Informationen auf dieser Plattform zu teilen."
},
"newFolder": "Neuer Ordner",
"cloneChat": "Chat klonen",
"cloned": "Klonen erfolgreich",
"enterToSubmit": "Drücke Enter zum absenden",
"submitPlaceholder": "Verfasse eine Nachricht oder klicke auf [/] für gespeicherte Prompts..."
}
================================================
FILE: public/locales/de/model.json
================================================
{
"configuration": "Konfiguration",
"model": "Model",
"token": {
"label": "Max Token",
"description": "Die maximale Anzahl von Tokens, die bei der Chat-Vervollständigung generiert werden. Die Gesamtlänge der Eingabetokens und generierten Tokens wird durch die Kontextlänge des Modells begrenzt."
},
"default": "Standardwert",
"temperature": {
"label": "Temperature",
"description": "Welche Abtastrate (sampling temmperature) verwendet werden soll. Möglichkeiten liegen zwischen 0 und 2. Höhere Werte wie 0,8 machen die Ausgabe zufälliger, während niedrigere Werte wie 0,2 sie fokussierter und deterministischer machen. Wir empfehlen im Allgemeinen, entweder diesen Wert oder den Top-p-Wert zu ändern, aber nicht beide gleichzeitig. (Standardwert: 1)"
},
"presencePenalty": {
"label": "Presence Penalty",
"description": "Eine Zahl zwischen -2,0 und 2,0. Positive Werte bestrafen neue Tokens basierend darauf, ob sie bisher im Text erscheinen sind, und erhöhen die Wahrscheinlichkeit des Modells, über neue Themen zu sprechen. (Standardwert: 0)"
},
"topP": {
"label": "Top-p",
"description": "Eine Zahl zwischen 0 und 1. Eine Alternative zum Abtasten mit Temperature (siehe oben), genannt Nukleus-sampling. Dabei berücksichtigt das Modell die Ergebnisse der Tokens mit Top-p-Wahrscheinlichkeitsmasse. Bei einem Wert von 0,1 werden nur die Tokens berücksichtigt, die die oberen 10% der Wahrscheinlichkeitsmasse ausmachen. Wir empfehlen im Allgemeinen, entweder diesen Wert oder die Temperatur zu ändern, aber nicht beide gleichzeitig. (Standardwert: 1)"
},
"frequencyPenalty": {
"label": "Frequency Penalty",
"description": "Eine Zahl zwischen -2,0 und 2,0. Positive Werte bestrafen neue Tokens basierend auf ihrer bestehenden Häufigkeit im Text und verringern die Wahrscheinlichkeit des Modells, dieselbe Zeile wörtlich zu wiederholen. (Standardwert: 0)"
},
"defaultChatConfig": "Standard Chat Konfiguration",
"defaultSystemMessage": "Standard System Nachricht",
"resetToDefault": "Auf Standardkonfiguration zurücksetzen"
}
================================================
FILE: public/locales/en/about.json
================================================
{
"description": "Better ChatGPT is an amazing open-source web app that allows you to play with OpenAI's ChatGPT API for free!",
"sourceCode": "Checkout the <0>source code</0> on GitHub and give it a ⭐️!",
"initiative": {
"description": "Checkout the <0><i>Open ChatGPT Initiative</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Support",
"paragraph1": "At Better ChatGPT, we strive to provide you with useful and amazing features around the clock. And just like any project, your support and motivation will be instrumental in helping us keep moving forward!",
"paragraph2": "If you have enjoyed using our app, we kindly ask you to give this <0>project</0> a ⭐️. Your endorsement means a lot to us and encourages us to work harder towards delivering the best possible experience.",
"paragraph3": "If you would like to support the team, consider sponsoring us through one of the methods below. Every contribution, no matter how small, helps us to maintain and improve our service.",
"paragraph4": "Thank you for being a part of our community, and we look forward to serving you better in the future.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "We invite you to join our Discord community! Our Discord server is a great place to exchange ChatGPT ideas and tips, and submit feature requests for Better ChatGPT. You'll have the opportunity to interact with the developers behind Better ChatGPT as well as other AI enthusiasts who share your passion.",
"paragraph2": "To join our server, simply click on the following link: <0>https://discord.gg/g3Qnwy4V6A</0>. We can't wait to see you there!"
},
"privacyStatement": {
"title": "Privacy Statement",
"paragraph1": "We highly value your privacy and are committed to safeguarding the privacy of our users. We do not collect or store any text you enter or receive from the OpenAI server in any form. Our source code is available for your inspection to verify this statement.",
"paragraph2": "We prioritise the security of your API key and handle it with utmost care. If you use your own API key, your key is exclusively stored on your browser and never shared with any third-party entity. It is solely used for the intended purpose of accessing the OpenAI API and not for any other unauthorised use."
}
}
================================================
FILE: public/locales/en/api.json
================================================
{
"securityMessage": "We prioritise the security of your API key and handle it with utmost care. Your key is exclusively stored on your browser and never shared with any third-party entity. It is solely used for the intended purpose of accessing the OpenAI API and not for any other unauthorised use.",
"apiEndpoint": {
"inputLabel": "API Endpoint",
"description": "When you choose an unofficial API endpoint, it functions as a proxy. A proxy works by acting as an intermediary between your device and the destination server, in this case, the OpenAI API. By doing so, it enables you to access the OpenAI API in regions where it might otherwise be restricted.",
"warn": "Additionally, if you provide a custom API endpoint that grants free access to the OpenAI API, you can use ChatGPT without the need to supply an API key by simply leaving the API key field blank. However, it's crucial to be cautious when using third-party API endpoints, as untrustworthy ones may log your personal information in the conversations. Always verify the reliability of an API endpoint before using it to protect your privacy and security."
},
"apiKey": {
"howTo": "Get your personal API key <0>here</0>.",
"inputLabel": "API Key"
},
"customEndpoint": "Use custom API endpoint",
"advancedConfig": "View advanced API configuration <0>here</0>",
"noApiKeyWarning": "No API key supplied! Please check your API settings."
}
================================================
FILE: public/locales/en/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/en/main.json
================================================
{
"save": "Save",
"generate": "Generate",
"cancel": "Cancel",
"confirm": "Confirm",
"warning": "Warning",
"clearMessageWarning": "Please be advised that by submitting this message, all subsequent messages will be deleted!",
"clearConversationWarning": "Please be advised that by confirming this action, all messages will be deleted!",
"clearConversation": "Clear Conversation History",
"import": "Import",
"export": "Export",
"author": "Made by Jing Hua",
"about": "About & Sponsor",
"api": "API",
"personal": "Personal",
"free": "Free",
"downloadChat": "Download Chat",
"user": "User",
"assistant": "Assistant",
"system": "System",
"newChat": "New Chat",
"lightMode": "Light Mode",
"darkMode": "Dark Mode",
"setting": "Settings",
"image": "Image",
"autoTitle": "Auto generate title",
"advancedMode": "Advanced mode",
"inlineLatex": "Inline Latex",
"prompt": "Prompt",
"promptLibrary": "Prompt Library",
"name": "Name",
"search": "Search",
"total": "Total",
"resetCost": "Reset Costs",
"countTotalTokens": "Count total tokens",
"morePrompts": "You can find more prompts here: ",
"clearPrompts": "Clear prompts",
"postOnShareGPT": {
"title": "Post on ShareGPT",
"warning": "Please be aware that by posting your conversation on ShareGPT, it will become publicly accessible and viewable to anyone. Once posted, the conversation cannot be hidden or deleted, and may be archived or shared by others. We advise you to consider carefully and avoid sharing sensitive or private information on this platform."
},
"newFolder": "New Folder",
"cloneChat": "Clone Chat",
"cloned": "Cloned",
"enterToSubmit": "Enter to submit",
"submitPlaceholder": "Type a message or click [/] for prompts..."
}
================================================
FILE: public/locales/en/model.json
================================================
{
"configuration": "Configuration",
"model": "Model",
"token": {
"label": "Max Token",
"description": "The maximum number of tokens to generate in the chat completion. The total length of input tokens and generated tokens is limited by the model's context length."
},
"default": "Default",
"temperature": {
"label": "Temperature",
"description": "What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or top p but not both. (Default: 1)"
},
"presencePenalty": {
"label": "Presence Penalty",
"description": "Number between -2.0 and 2.0. Positive values penalise new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics. (Default: 0)"
},
"topP": {
"label": "Top-p",
"description": "Number between 0 and 1. An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. (Default: 1)"
},
"frequencyPenalty": {
"label": "Frequency Penalty",
"description": "Number between -2.0 and 2.0. Positive values penalise new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. (Default: 0)"
},
"defaultChatConfig": "Default Chat Config",
"defaultSystemMessage": "Default System Message",
"resetToDefault": "Reset To Default"
}
================================================
FILE: public/locales/en-US/about.json
================================================
{
"description": "Better ChatGPT is an amazing open-source web app that allows you to play with OpenAI's ChatGPT API for free!",
"sourceCode": "Checkout the <0>source code</0> on GitHub and give it a ⭐️!",
"initiative": {
"description": "Checkout the <0><i>Open ChatGPT Initiative</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Support",
"paragraph1": "At Better ChatGPT, we strive to provide you with useful and amazing features around the clock. And just like any project, your support and motivation will be instrumental in helping us keep moving forward!",
"paragraph2": "If you have enjoyed using our app, we kindly ask you to give this <0>project</0> a ⭐️. Your endorsement means a lot to us and encourages us to work harder towards delivering the best possible experience.",
"paragraph3": "If you would like to support the team, consider sponsoring us through one of the methods below. Every contribution, no matter how small, helps us to maintain and improve our service.",
"paragraph4": "Thank you for being a part of our community, and we look forward to serving you better in the future.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "We invite you to join our Discord community! Our Discord server is a great place to exchange ChatGPT ideas and tips, and submit feature requests for Better ChatGPT. You'll have the opportunity to interact with the developers behind Better ChatGPT as well as other AI enthusiasts who share your passion.",
"paragraph2": "To join our server, simply click on the following link: <0>https://discord.gg/g3Qnwy4V6A</0>. We can't wait to see you there!"
},
"privacyStatement": {
"title": "Privacy Statement",
"paragraph1": "We highly value your privacy and are committed to safeguarding the privacy of our users. We do not collect or store any text you enter or receive from the OpenAI server in any form. Our source code is available for your inspection to verify this statement.",
"paragraph2": "We prioritize the security of your API key and handle it with utmost care. If you use your own API key, your key is exclusively stored on your browser and never shared with any third-party entity. It is solely used for the intended purpose of accessing the OpenAI API and not for any other unauthorized use."
}
}
================================================
FILE: public/locales/en-US/api.json
================================================
{
"securityMessage": "We prioritize the security of your API key and handle it with utmost care. Your key is exclusively stored on your browser and never shared with any third-party entity. It is solely used for the intended purpose of accessing the OpenAI API and not for any other unauthorized use.",
"apiEndpoint": {
"inputLabel": "API Endpoint",
"description": "When you choose an unofficial API endpoint, it functions as a proxy. A proxy works by acting as an intermediary between your device and the destination server, in this case, the OpenAI API. By doing so, it enables you to access the OpenAI API in regions where it might otherwise be restricted.",
"warn": "Additionally, if you provide a custom API endpoint that grants free access to the OpenAI API, you can use ChatGPT without the need to supply an API key by simply leaving the API key field blank. However, it's crucial to be cautious when using third-party API endpoints, as untrustworthy ones may log your personal information in the conversations. Always verify the reliability of an API endpoint before using it to protect your privacy and security."
},
"apiKey": {
"howTo": "Get your personal API key <0>here</0>.",
"inputLabel": "API Key"
},
"customEndpoint": "Use custom API endpoint",
"advancedConfig": "View advanced API configuration <0>here</0>",
"noApiKeyWarning": "No API key supplied! Please check your API settings."
}
================================================
FILE: public/locales/en-US/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/en-US/main.json
================================================
{
"save": "Save",
"generate": "Generate",
"cancel": "Cancel",
"confirm": "Confirm",
"warning": "Warning",
"clearMessageWarning": "Please be advised that by submitting this message, all subsequent messages will be deleted!",
"clearConversationWarning": "Please be advised that by confirming this action, all messages will be deleted!",
"clearConversation": "Clear Conversation History",
"import": "Import",
"export": "Export",
"author": "Made by Jing Hua",
"about": "About & Sponsor",
"api": "API",
"personal": "Personal",
"free": "Free",
"downloadChat": "Download Chat",
"user": "User",
"assistant": "Assistant",
"system": "System",
"newChat": "New Chat",
"lightMode": "Light Mode",
"darkMode": "Dark Mode",
"setting": "Settings",
"image": "Image",
"autoTitle": "Auto generate title",
"advancedMode": "Advanced mode",
"inlineLatex": "Inline Latex",
"prompt": "Prompt",
"promptLibrary": "Prompt Library",
"name": "Name",
"search": "Search",
"total": "Total",
"resetCost": "Reset Costs",
"countTotalTokens": "Count total tokens",
"morePrompts": "You can find more prompts here: ",
"clearPrompts": "Clear prompts",
"postOnShareGPT": {
"title": "Post on ShareGPT",
"warning": "Please be aware that by posting your conversation on ShareGPT, it will become publicly accessible and viewable to anyone. Once posted, the conversation cannot be hidden or deleted, and may be archived or shared by others. We advise you to consider carefully and avoid sharing sensitive or private information on this platform."
},
"newFolder": "New Folder",
"cloneChat": "Clone Chat",
"cloned": "Cloned",
"enterToSubmit": "Enter to submit",
"submitPlaceholder": "Type a message or click [/] for prompts..."
}
================================================
FILE: public/locales/en-US/model.json
================================================
{
"configuration": "Configuration",
"model": "Model",
"token": {
"label": "Max Token",
"description": "The maximum number of tokens to generate in the chat completion. The total length of input tokens and generated tokens is limited by the model's context length."
},
"default": "Default",
"temperature": {
"label": "Temperature",
"description": "What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend altering this or top p but not both. (Default: 1)"
},
"presencePenalty": {
"label": "Presence Penalty",
"description": "Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics. (Default: 0)"
},
"topP": {
"label": "Top-p",
"description": "Number between 0 and 1. An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. (Default: 1)"
},
"frequencyPenalty": {
"label": "Frequency Penalty",
"description": "Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. (Default: 0)"
},
"defaultChatConfig": "Default Chat Config",
"defaultSystemMessage": "Default System Message",
"resetToDefault": "Reset To Default"
}
================================================
FILE: public/locales/es/about.json
================================================
{
"description": "¡Better ChatGPT es una aplicación web de código abierto que te permite usar la API de OpenAI totalmente gratis!",
"sourceCode": "Comprueba el <0>código fuente</0> en GitHub y dale una ⭐️",
"initiative": {
"description": "¡Tómate un minuto para leer <0><i>La iniciativa de Open ChatGPT</i></0> (inglés)!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Apoya el proyecto",
"paragraph1": "Aquí, en Better ChatGPT, nos esforzamos mucho para brindarte mejoras y nuevas funcionalidades lo antes posible. Y, al igual que en todos los proyectos, ¡tu apoyo y motivación mantiene a Better ChatGPT vivo!",
"paragraph2": "Si disfrutas usando nuestra aplicación, te pedimos por favor que des una ⭐️ a este <0>proyecto</0>. Tu apoyo significa mucho para nosotros y nos ayuda a trabajar lo máximo posible para ofrecerte las mejores experencias posibles.",
"paragraph3": "Si deseas apoyar al equipo, considera patrocinarnos mediante alguno de los métodos a continuación. Toda contribución, aunque sea pequeña, nos ayuda a mantener y mejorar el servicio.",
"paragraph4": "Gracias por ser parte de nuestra comunidad. Estamos deseando servirte de la mejor manera posible en el futuro.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Servidor de Discord",
"paragraph1": "¡Te invitamos a unirte a nuestra comunidad de Discord! Nuestro servidor de Discord es genial para intercambiar temas relacionados con ChatGPT, como ideas y consejos, y solicitar nuevas funcionalidades para Better ChatGPT. También tendrás la oportunidad de hablar con los desarrolladores así como otros entusiastas de la IA.",
"paragraph2": "Para unirte al servidor, pulsa sobre el siguiente enlace: <0>https://discord.gg/g3Qnwy4V6A</0>. ¡Te esperamos!"
},
"privacyStatement": {
"title": "Declaración de privacidad",
"paragraph1": "Valoramos mucho su privacidad y nos comprometemos a proteger la privacidad de nuestros usuarios. No recogemos ni almacenamos ningún dato que usted introduzca o reciba del servidor OpenAI de ninguna forma. Nuestro código fuente está disponible para su inspección para verificar esta declaración.",
"paragraph2": "Prioritamos la seguridad de su clave API y la tratamos con sumo cuidado. Si utiliza su propia clave de API, ésta se almacena exclusivamente en su navegador y nunca se comparte con ninguna entidad de terceros. Se utiliza únicamente para el fin exclusivo de acceder a la API de OpenAI y no para ningún otro uso no autorizado."
}
}
================================================
FILE: public/locales/es/api.json
================================================
{
"securityMessage": "Prioritamos la seguridad de su clave API y la tratamos con sumo cuidado. Si utiliza su propia clave de API, ésta se almacena exclusivamente en su navegador y nunca se comparte con ninguna entidad de terceros. Se utiliza únicamente para el fin exclusivo de acceder a la API de OpenAI y no para ningún otro uso no autorizado.",
"apiEndpoint": {
"inputLabel": "Punto final de acceso de la API",
"description": "Cuando eliges un punto final de API no oficial, básicamente funciona como un proxy. Un proxy funciona actuando como intermediario entre tu dispositivo y el servidor de destino, en este caso, la API de OpenAI. Al hacerlo, te permite acceder a la API de OpenAI en regiones donde de otro modo podría estar restringida.",
"warn": "Además, si proporcionas un punto final de API personalizado que otorga acceso gratuito a la API de OpenAI, puedes usar ChatGPT sin la necesidad de proporcionar una clave de API simplemente dejando en blanco el campo de la clave de API. Sin embargo, es fundamental tener precaución al usar puntos finales de API de terceros, ya que los que no sean confiables pueden registrar tu información personal en las conversaciones. Siempre verifica la fiabilidad de un punto final de API antes de usarlo para proteger tu privacidad y seguridad."
},
"apiKey": {
"howTo": "Obtén tu clave personal <0>aquí</0>.",
"inputLabel": "Clave API"
},
"customEndpoint": "Usar un punto final de acceso personalizado",
"advancedConfig": "Ver configuración avanzada de API <0>aquí</0>",
"noApiKeyWarning": "¡No se proporcionó clave de API! Por favor, revisa tus ajustes de API."
}
================================================
FILE: public/locales/es/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/es/main.json
================================================
{
"save": "Guardar",
"generate": "Generar",
"cancel": "Cancelar",
"confirm": "Aceptar",
"warning": "Aviso",
"clearMessageWarning": "Al enviar este mensaje, todos los mensajes siguientes serán eliminados. ¿Está seguro que quiere continuar?",
"clearConversationWarning": "Al hacer clic en 'Aceptar', todos los mensajes de esta conversación serán eliminados.",
"clearConversation": "Limpiar conversación",
"import": "Importar",
"export": "Exportar",
"author": "Hecho por Jing Hua",
"about": "Acerca de y Patrocinadores",
"api": "API",
"personal": "Personal",
"free": "Gratuito",
"downloadChat": "Descargar conversación",
"user": "Usuario",
"assistant": "Asistente",
"system": "Sistema",
"newChat": "Nuevo Chat",
"lightMode": "Modo claro",
"darkMode": "Modo oscuro",
"setting": "Ajustes",
"image": "Imagen",
"autoTitle": "Generar automáticamente el título de la conversación.",
"advancedMode": "Modo avanzado",
"inlineLatex": "Latex en línea",
"prompt": "Prompt",
"promptLibrary": "Librería de Prompts",
"name": "Nombre",
"search": "Buscar",
"total": "Total",
"resetCost": "Reiniciar costos",
"countTotalTokens": "Contar tokens totales",
"morePrompts": "Puedes encontrar más prompts aquí: ",
"clearPrompts": "Prompts claras",
"postOnShareGPT": {
"title": "Publicar en ShareGPT",
"warning": "Por favor, tenga en cuenta que al publicar su conversación en ShareGPT, esta será accesible y visible para cualquiera. Una vez publicada, la conversación no se podrá ocultar ni eliminar, y puede ser archivada o compartida por otros. Le aconsejamos que lo considere detenidamente y evite compartir información sensible o privada en esta plataforma."
},
"newFolder": "Nueva Carpeta",
"cloneChat": "Clone Chat",
"cloned": "Cloned",
"enterToSubmit": "Enter to submit",
"submitPlaceholder": "Escribe un mensaje o haz clic en [/] para prompt..."
}
================================================
FILE: public/locales/es/model.json
================================================
{
"configuration": "Configuración",
"model": "Modelo",
"token": {
"label": "Máximo número de tokens",
"description": "El máximo número de tokens que se utilizan para generar la respuesta. La longitud total de los tokens de entrada y los tokens generados está limitada por la longitud de contexto del modelo."
},
"default": "Valores por defecto",
"temperature": {
"label": "Temperatura",
"description": "Qué temperatura a usar (valores entre 0 y 2). Si se elige un valor alto, por ejemplo 0.8, la salida será más aleatoria, mientras que un valor bajo, como 0.2, hará que la salida sea más enfocada y predecible. Como recomendación general, se sugiere ajustar este parámetro o el top p, pero no ambos al mismo tiempo. Por defecto, el valor es 1."
},
"presencePenalty": {
"label": "Sanción por presencia",
"description": "Este parámetro permite controlar el nivel de repetición del modelo. La diferencia entre este parámetro y las sanciones por frecuencia, es que este se centra en evitar repeticiones de temas mientras que las sanciones por frecuencia en evitar repeticiones de palabras. Los valores positivos incrementan la probabilidad de que el modelo sea menos repetitivo y que hable sobre nuevos temas. Su valor de por defecto es 0."
},
"topP": {
"label": "Top-p (P máxima)",
"description": "Este argumento es una forma alternativa de controlar la aleatoridad y creatividad del texto. Por ejemplo, si establecemos su valor a 0.1, significa que solo se consideran los tokens que están comprendidos entre el 10% de la masa de probabilidad."
},
"frequencyPenalty": {
"label": "Sanción por frecuencia",
"description": "Este argumento controla el nivel de repetición que permite usar al modelo en sus respuestas. Los valores positivos decrementan la probabilidad de que el modelo se repita. Su valor de por defecto es 0."
},
"defaultChatConfig": "Configuración de chat de por defecto",
"defaultSystemMessage": "Mensaje de por defecto del sistema",
"resetToDefault": "Restablecer a los valores predeterminados"
}
================================================
FILE: public/locales/fr/about.json
================================================
{
"description": "Better ChatGPT est une application web open-source incroyable qui vous permet de jouer avec l'API ChatGPT d'OpenAI gratuitement !",
"sourceCode": "Consultez le <0>code source</0> sur GitHub et donnez-lui une ⭐️ !",
"initiative": {
"description": "Découvrez l'<0><i>Initiative Open ChatGPT</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Support",
"paragraph1": "Chez Better ChatGPT, nous nous efforçons de vous fournir des fonctionnalités utiles et incroyables 24 heures sur 24. Et comme tout projet, votre soutien et votre motivation seront essentiels pour nous aider à avancer !",
"paragraph2": "Si vous avez apprécié notre application, nous vous demandons gentiment de donner une ⭐️ à ce <0>projet</0>. Votre approbation nous tient à cœur et nous incite à travailler plus dur pour offrir la meilleure expérience possible.",
"paragraph3": "Si vous souhaitez soutenir l'équipe, envisagez de nous sponsoriser grâce à l'un des modes de paiement ci-dessous. Chaque contribution, aussi petite soit-elle, nous aide à maintenir et à améliorer notre service.",
"paragraph4": "Merci d'être membre de notre communauté, et nous espérons vous servir mieux à l'avenir.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Serveur Discord",
"paragraph1": "Nous vous invitons à rejoindre notre communauté Discord ! Notre serveur Discord est un excellent endroit pour échanger des idées et des astuces ChatGPT, et pour soumettre des demandes de fonctionnalités pour Better ChatGPT. Vous aurez l'occasion d'interagir avec les développeurs de Better ChatGPT ainsi qu'avec d'autres passionnés d'IA qui partagent votre passion.",
"paragraph2": "Pour rejoindre notre serveur, il vous suffit de cliquer sur le lien suivant : <0>https://discord.gg/g3Qnwy4V6A</0>. Nous avons hâte de vous y voir !"
},
"privacyStatement": {
"title": "Déclaration de confidentialité",
"paragraph1": "Nous attachons une grande importance à votre vie privée et nous nous engageons à protéger la vie privée de nos utilisateurs. Nous ne collectons ni ne stockons aucun texte que vous entrez ou que vous recevez du serveur OpenAI sous quelque forme que ce soit. Notre code source est disponible pour votre inspection afin de vérifier cette déclaration.",
"paragraph2": "Nous accordons la priorité à la sécurité de votre clé API et la traitons avec le plus grand soin. Si vous utilisez votre propre clé API, votre clé est exclusivement stockée sur votre navigateur et jamais partagée avec une entité tiers. Elle est utilisée uniquement dans le but prévu d'accéder à l'API OpenAI et non pour toute autre utilisation non autorisée."
}
}
================================================
FILE: public/locales/fr/api.json
================================================
{
"securityMessage": "Nous accordons la priorité à la sécurité de votre clé API et la traitons avec le plus grand soin. Votre clé est exclusivement stockée sur votre navigateur et jamais partagée avec une entité tierce. Elle est utilisée uniquement dans le but prévu d'accéder à l'API OpenAI et non pour toute autre utilisation non autorisée.",
"apiEndpoint": {
"inputLabel": "Point d'accès de l'API",
"description": "Lorsque vous choisissez un point d'accès de l'API non officiel, il fonctionne essentiellement comme un proxy. Un proxy agit en tant qu'intermédiaire entre votre appareil et le serveur de destination, dans ce cas-ci, l'API OpenAI. Ce faisant, il vous permet d'accéder à l'API OpenAI dans des régions où cela pourrait être autrement restreint.",
"warn": "De plus, si vous fournissez un point d'accès personnalisé à l'API qui offre un accès gratuit à l'API OpenAI, vous pouvez utiliser ChatGPT sans avoir besoin de fournir une clé API en laissant simplement le champ de clé API vide. Cependant, il est crucial de faire preuve de prudence lors de l'utilisation de points d'accès de l'API tiers, car ceux qui ne sont pas fiables peuvent enregistrer vos informations personnelles dans les conversations. Vérifiez toujours la fiabilité d'un point d'accès de l'API avant de l'utiliser pour protéger votre vie privée et votre sécurité."
},
"apiKey": {
"howTo": "Obtenez votre clé API personnelle <0>ici</0>.",
"inputLabel": "Clé API"
},
"customEndpoint": "Utiliser un point d'accès personnalisé à l'API",
"advancedConfig": "Voir la configuration avancée de l'API <0>ici</0>",
"noApiKeyWarning": "Aucune clé API fournie ! Veuillez vérifier vos paramètres d'API."
}
================================================
FILE: public/locales/fr/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Synchronisez vos discussions et paramètres sans effort avec Google Drive.",
"button": {
"sync": "Synchroniser vos discussions",
"stop": "Arrêter la synchronisation",
"create": "Créer un nouveau fichier",
"confirm": "Confirmer la sélection"
},
"notice": "Note: Vous devrez vous reconnecter à chaque visite ou toutes les heures. Pour éviter que vos données cloud soient écrasées, n'utilisez pas Better ChatGPT sur plus d'un appareil en même temps.",
"privacy": "Votre vie privée est importante pour nous et pour la garantir, Better ChatGPT n'a que des accès non sensibles, c'est-à-dire qu'il peut seulement créer, visualiser et gérer ses propres fichiers et dossiers.",
"toast": {
"sync": "Synchronisation réussie!",
"stop": "Synchronisation arrêtée"
}
}
================================================
FILE: public/locales/fr/main.json
================================================
{
"save": "Enregistrer",
"generate": "Générer",
"cancel": "Annuler",
"confirm": "Confirmer",
"warning": "Attention",
"clearMessageWarning": "Veuillez prendre note qu'en envoyant ce message, tous les messages suivants seront supprimés !",
"clearConversationWarning": "Veuillez prendre note que si vous confirmez cette action, tous les messages seront supprimés !",
"clearConversation": "Effacer la conversation",
"import": "Importer",
"export": "Exporter",
"author": "Créé par Jing Hua",
"about": "À propos et Sponsor",
"api": "API",
"personal": "Personnel",
"free": "Gratuit",
"downloadChat": "Télécharger la conversation",
"user": "Utilisateur",
"assistant": "Assistant",
"system": "Système",
"newChat": "Nouvelle Conversation",
"lightMode": "Mode clair",
"darkMode": "Mode sombre",
"setting": "Paramètres",
"image": "Image",
"autoTitle": "Générer le titre automatiquement",
"advancedMode": "Mode avancé",
"inlineLatex": "Latex en ligne",
"prompt": "Incitation",
"promptLibrary": "Bibliothèque de prompt",
"name": "Nom",
"search": "Recherche",
"total": "Total",
"resetCost": "Réinitialiser les coûts",
"countTotalTokens": "Compter le nombre total de jetons",
"morePrompts": "Vous pouvez trouver plus de prompts ici : ",
"clearPrompts": "Effacer les prompts",
"postOnShareGPT": {
"title": "Publier sur ShareGPT",
"warning": "Veuillez noter que si vous publiez votre conversation sur ShareGPT, elle deviendra accessible au public et visible par tous. Une fois publiée, la conversation ne peut pas être cachée ou supprimée, et peut être archivée ou partagée par d'autres. Nous vous conseillons de considérer attentivement et d'éviter de partager des informations sensibles ou privées sur cette plateforme."
},
"newFolder": "Nouveau Dossier",
"cloneChat": "Cloner la Conversation",
"cloned": "Clonée",
"enterToSubmit": "Entrée pour soumettre",
"submitPlaceholder": "Saisissez un message ou cliquez sur [/] pour des prompts..."
}
================================================
FILE: public/locales/fr/model.json
================================================
{
"configuration": "Configuration",
"model": "Modèle",
"token": {
"label": "Max Token",
"description": "Le nombre maximum de jetons à générer dans la complétion de la conversation. La longueur totale des jetons d'entrée et des jetons générés est limitée par la longueur de contexte du modèle."
},
"default": "Défaut",
"temperature": {
"label": "Température",
"description": "La température d'échantillonnage, entre 0 et 2. Des valeurs plus élevées comme 0,8 rendent la sortie plus aléatoire, tandis que des valeurs plus basses comme 0,2 la rendent plus ciblée et déterminée. Nous recommandons généralement de modifier ceci ou top-p mais pas les deux. (Par défaut : 1)"
},
"presencePenalty": {
"label": "Pénalité de présence",
"description": "Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur apparition dans le texte jusqu'à présent, augmentant la probabilité du modèle de parler de nouveaux sujets. (Par défaut : 0)"
},
"topP": {
"label": "Top-p",
"description": "Nombre entre 0 et 1. Une alternative à l'échantillonnage avec la température, appelée échantillonnage de noyau, où le modèle considère les résultats des jetons avec une probabilité de p-masse supérieure. Ainsi, 0,1 signifie que seuls les jetons constituant les 10 % supérieurs de la masse de probabilité sont considérés. Nous recommandons généralement de modifier ceci ou la température mais pas les deux. (Par défaut : 1)"
},
"frequencyPenalty": {
"label": "Pénalité de fréquence",
"description": "Nombre entre -2.0 et 2.0. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur fréquence existante dans le texte jusqu'à présent, diminuant la probabilité du modèle de répéter la même ligne mot pour mot. (Par défaut : 0)"
},
"defaultChatConfig": "Configuration de Chat Par Défaut",
"defaultSystemMessage": "Message Système Par Défaut",
"resetToDefault": "Réinitialiser aux paramètres par défaut"
}
================================================
FILE: public/locales/it/about.json
================================================
{
"description": "Better ChatGPT è un'incredibile applicazione web open-source che permette di giocare con l'API ChatGPT di OpenAI gratuitamente!",
"sourceCode": "Scopri il <0>codice sorgente</0> su GitHub e dai una ⭐️!",
"initiative": {
"description": "Scopri l'iniziativa <0><i>Open ChatGPT</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Supporto",
"paragraph1": "Noi di Better ChatGPT ci sforziamo di fornirvi funzioni utili e sorprendenti 24 ore su 24. E proprio come ogni progetto, il tuo supporto e la tua motivazione ci aiuteranno a continuare a progredire. E proprio come in ogni progetto, il tuo supporto e la tua motivazione saranno fondamentali per aiutarci ad andare avanti!",
"paragraph2": "Se ti sei trovato bene con la nostra app, ti chiediamo gentilmente di dare una ⭐️ a questo <0>progetto</0>. La tua approvazione significa molto per noi e ci incoraggia a lavorare sempre di più per offrire la migliore esperienza possibile.",
"paragraph3": "Se desideri sostenere il team, prendi in considerazione la possibilità di sponsorizzarci attraverso uno dei metodi indicati di seguito. Ogni contributo, per quanto piccolo, ci aiuta a mantenere e migliorare il nostro servizio.",
"paragraph4": "Ti ringraziamo di far parte della nostra community e ci auguriamo di poterti servire meglio in futuro.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "Ti invitiamo ad unirti alla nostra community Discord! Il nostro server Discord è un luogo ideale per scambiare idee e suggerimenti su ChatGPT e per inviare richieste di funzionalità per Better ChatGPT. Avrai l'opportunità di interagire con gli sviluppatori di Better ChatGPT e con altri appassionati di IA che condividono la tua stessa passione.",
"paragraph2": "Per unirsi al nostro server, basta cliccare sul seguente link: <0>https://discord.gg/g3Qnwy4V6A</0>. Non vediamo l'ora di vederti lì!"
},
"privacyStatement": {
"title": "Informativa sulla privacy",
"paragraph1": "Ci teniamo molto alla tua privacy e ci impegniamo a salvaguardare quella dei nostri utenti. Non raccogliamo né memorizziamo alcun testo immesso o ricevuto dal server OpenAI in alcuna forma. Il nostro codice sorgente è disponibile per la verifica di questa dichiarazione.",
"paragraph2": "Diamo priorità alla sicurezza della tua chiave API e la gestiamo con la massima cura. Se si utilizza la propria chiave API, questa viene memorizzata esclusivamente sul browser dell'utente e non viene mai condivisa con alcuna entità terza. Viene utilizzata esclusivamente per lo scopo previsto di accedere all'API OpenAI e non per altri usi non autorizzati."
}
}
================================================
FILE: public/locales/it/api.json
================================================
{
"securityMessage": "Diamo priorità alla sicurezza della tua chiave API e la gestiamo con la massima cura. La chiave viene memorizzata esclusivamente nel browser dell'utente e non viene mai condivisa con terze parti. Viene utilizzata esclusivamente per lo scopo previsto di accedere all'API OpenAI e non per altri usi non autorizzati.",
"apiEndpoint": {
"inputLabel": "API Endpoint",
"description": "Quando si sceglie un endpoint API non ufficiale, questo funziona come un proxy. Un proxy funziona come un intermediario tra il dispositivo e il server di destinazione, in questo caso l'API OpenAI. In questo modo, consente di accedere all'API OpenAI in regioni in cui potrebbe essere limitata.",
"warn": "Inoltre, se si fornisce un endpoint API personalizzato che garantisce l'accesso gratuito all'API OpenAI, è possibile utilizzare ChatGPT senza la necessità di fornire una chiave API, semplicemente lasciando vuoto il campo della chiave API. Tuttavia, è fondamentale essere cauti quando si utilizzano endpoint API di terze parti, poiché quelli non affidabili potrebbero registrare le informazioni personali nelle conversazioni. Verifica sempre l'affidabilità di un endpoint API prima di utilizzarlo per proteggere la tua privacy e la sicurezza."
},
"apiKey": {
"howTo": "Ottieni la tua chiave API personale <0>qui</0>.",
"inputLabel": "Chiave API"
},
"customEndpoint": "Usa un endpoint API personalizzato",
"advancedConfig": "Visualizza la configurazione avanzata dell'API <0>qui</0>",
"noApiKeyWarning": "Non è stata fornita alcuna chiave API! Controlla le impostazioni API."
}
================================================
FILE: public/locales/it/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/it/main.json
================================================
{
"save": "Salva",
"generate": "Generare",
"cancel": "Annulla",
"confirm": "Conferma",
"warning": "Attenzione",
"clearMessageWarning": "Ti informiamo che inviando questo messaggio, tutti i messaggi successivi saranno cancellati!",
"clearConversationWarning": "Ti informiamo che confermando questa azione, tutti i messaggi saranno cancellati!",
"clearConversation": "Elimina Conversazione",
"import": "Importa",
"export": "Esporta",
"author": "Realizzato da Jing Hua",
"about": "Info & Sponsor",
"api": "API",
"personal": "Personale",
"free": "Gratuito",
"downloadChat": "Scarica Conversazione",
"user": "Utente",
"assistant": "Assistente",
"system": "Sistema",
"newChat": "Nuova Conversazione",
"lightMode": "Modalità Chiara",
"darkMode": "Modalità Scura",
"setting": "Impostazioni",
"image": "Immagine",
"autoTitle": "Genera automaticamente il titolo",
"advancedMode": "Modalità avanzata",
"inlineLatex": "Latex in linea",
"prompt": "Prompt",
"promptLibrary": "Libreria Prompt",
"name": "Nome",
"search": "Cerca",
"total": "Totale",
"resetCost": "Ripristina costi",
"countTotalTokens": "Conteggio totale dei token",
"morePrompts": "Puoi trovare altri prompt qui:",
"clearPrompts": "Cancella prompts",
"postOnShareGPT": {
"title": "Pubblica su ShareGPT",
"warning": "Ti ricordiamo che pubblicando la tua conversazione su ShareGPT, questa diventerà pubblicamente accessibile e visualizzabile da chiunque. Una volta pubblicata, la conversazione non può essere nascosta o cancellata e può essere archiviata o condivisa da altri. Ti consigliamo di valutare attentamente e di evitare di condividere informazioni sensibili o private su questa piattaforma."
},
"newFolder": "Nuova Cartella",
"cloneChat": "Duplica Conversazione",
"cloned": "Duplicata",
"enterToSubmit": "Invio per inviare",
"submitPlaceholder": "Digita un messaggio o fai clic su [/] per prompt..."
}
================================================
FILE: public/locales/it/model.json
================================================
{
"configuration": "Configurazione",
"model": "Modello",
"token": {
"label": "Token Massimo",
"description": "Il numero massimo di token da generare nel completamento della chat. La lunghezza totale dei token in ingresso e di quelli generati è limitata dalla lunghezza del contesto del modello."
},
"default": "Default",
"temperature": {
"label": "Temperatura",
"description": "Quale temperatura di campionamento utilizzare, tra 0 e 2. Valori più alti, come 0,8, renderanno l'output più casuale, mentre valori più bassi, come 0,2, lo renderanno più mirato e deterministico. In genere si consiglia di modificare questo valore o quello superiore, ma non entrambi. (Valore predefinito: 1)"
},
"presencePenalty": {
"label": "Presenza Penalità",
"description": "Numero compreso tra -2,0 e 2,0. I valori positivi penalizzano i nuovi token in base alla loro presenza nel testo, aumentando la probabilità che il modello parli di nuovi argomenti. (Valore predefinito: 0)"
},
"topP": {
"label": "Top-p",
"description": "Numero compreso tra 0 e 1. Un'alternativa al campionamento con temperatura, chiamato campionamento del nucleo, in cui il modello considera i risultati dei token con la massa di probabilità p più alta. Quindi 0,1 significa che vengono considerati solo i token che comprendono il 10% della massa di probabilità. In genere si consiglia di modificare questo parametro o la temperatura, ma non entrambi. (Predefinito: 1)"
},
"frequencyPenalty": {
"label": "Penalità di frequenza",
"description": "Numero compreso tra -2,0 e 2,0. I valori positivi penalizzano i nuovi token in base alla loro frequenza nel testo fino a quel momento, diminuendo la probabilità del modello di ripetere testualmente la stessa riga. (Valore predefinito: 0)"
},
"defaultChatConfig": "Configurazione predefinita della conversazione",
"defaultSystemMessage": "Messaggio di sistema predefinito",
"resetToDefault": "Ripristina alle impostazioni predefinite"
}
================================================
FILE: public/locales/ja/about.json
================================================
{
"description": "Better ChatGPTは、OpenAIのChatGPT APIを無料でお試しいただける素晴らしいオープンソースのWebアプリです!",
"sourceCode": "GitHubで<0>ソースコード</0>をチェックして、⭐️を付けてください!",
"initiative": {
"description": "<0><i>Open ChatGPTイニシアチブ</i></0>をチェックしてください!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "サポート",
"paragraph1": "Better ChatGPTでは、お客様に24時間365日、便利で素晴らしい機能を提供することを目指しています。そして、どんなプロジェクトでも、皆様からのサポートと励ましが、私たちが前進し続ける原動力となります!",
"paragraph2": "アプリをお楽しみいただけた場合は、この<0>プロジェクト</0>に⭐️を付けていただけると嬉しいです。皆様からの応援が私たちの励みとなり、より良い体験を提供するために努力する原動力となります。",
"paragraph3": "チームをサポートしたい場合は、以下の方法でスポンサーになっていただくことを検討してください。どんなに小さな寄付でも、サービスの維持・向上に役立ちます。",
"paragraph4": "私たちのコミュニティの一員であることに感謝し、今後もより良いサービスを提供していくことを楽しみにしています。",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discordサーバー",
"paragraph1": "Discordコミュニティへのご参加をお待ちしております!Discordサーバーでは、ChatGPTに関するアイデアやヒントの交換、Better ChatGPTの機能リクエストの提出などができます。Better ChatGPTの開発者や、同じAIに情熱を持つ他のエンスージアストと交流する機会もあります。",
"paragraph2": "サーバーに参加するには、次のリンクをクリックしてください:<0>https://discord.gg/g3Qnwy4V6A</0>。お待ちしております!"
},
"privacyStatement": {
"title": "プライバシーに関する声明",
"paragraph1": "私たちは皆様のプライバシーを非常に重要視し、ユーザーのプライバシーを保護することに力を入れています。OpenAIサーバーから入力または受信したテキストは一切収集・保存していません。この声明の確認のために、ソースコードを公開しています。",
"paragraph2": "皆様のAPIキーのセキュリティを最優先にし、最大限の注意を払って取り扱っています。独自のAPIキーを使用する場合、キーはブラウザ上でのみ保存され、第三者とは一切共有されません。キーはOpenAI APIにアクセスする目的でのみ使用され、他の無許可の使用には利用されません。"
}
}
================================================
FILE: public/locales/ja/api.json
================================================
{
"securityMessage": "APIキーのセキュリティを最優先し、細心の注意を払って取り扱っています。キーはお客様のブラウザにのみ保存され、第三者とは一切共有されません。OpenAI APIにアクセスする目的でのみ使用され、他の不正な目的で使用されることはありません。",
"apiEndpoint": {
"inputLabel": "APIエンドポイント",
"description": "非公式のAPIエンドポイントを選択すると、プロキシとして機能します。プロキシは、あなたのデバイスと目的のサーバ(この場合はOpenAI API)の間に中継役として働くことによって、制限されている可能性のある地域でもOpenAI APIにアクセスできるようになります。",
"warn": "さらに、無料でOpenAI APIにアクセスできるカスタムAPIエンドポイントを提供する場合、APIキー欄を空白にするだけでAPIキーを提供せずにChatGPTを利用できます。ただし、第三者のAPIエンドポイントを利用する際は注意が必要で、信頼性の低いものは会話の中で個人情報を記録することがあります。プライバシーとセキュリティを保護するために、APIエンドポイントを使用する前に信頼性を確認してください。"
},
"apiKey": {
"howTo": "個人用APIキーは<0>こちら</0>で取得できます。",
"inputLabel": "APIキー"
},
"customEndpoint": "カスタムAPIエンドポイントを使用する",
"advancedConfig": "詳細なAPI設定は<0>こちら</0>で表示できます。",
"noApiKeyWarning": "APIキーが入力されていません!API設定を確認してください。"
}
================================================
FILE: public/locales/ja/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/ja/main.json
================================================
{
"save": "保存",
"generate": "生成",
"cancel": "キャンセル",
"confirm": "確認",
"warning": "警告",
"clearMessageWarning": "このメッセージを送信すると、以降のメッセージがすべて削除されることに注意してください!",
"clearConversationWarning": "この操作を確認すると、すべてのメッセージが削除されることに注意してください!",
"clearConversation": "会話をクリア",
"import": "インポート",
"export": "エクスポート",
"author": "Jing Hua作",
"about": "概要 & スポンサー",
"api": "API",
"personal": "個人",
"free": "無料",
"downloadChat": "チャットをダウンロード",
"user": "ユーザー",
"assistant": "アシスタント",
"system": "システム",
"newChat": "新しいチャット",
"lightMode": "ライトモード",
"darkMode": "ダークモード",
"setting": "設定",
"image": "画像",
"autoTitle": "タイトルを自動生成",
"advancedMode": "上級モード",
"inlineLatex": "インライン LaTeX",
"prompt": "プロンプト",
"promptLibrary": "プロンプトライブラリ",
"name": "名前",
"search": "検索",
"total": "合計",
"resetCost": "コストをリセットする",
"countTotalTokens": "トークンの合計数をカウント",
"morePrompts": "ここでさらにプロンプトを見つけることができます:",
"clearPrompts": "プロンプトをクリア",
"postOnShareGPT": {
"title": "ShareGPTに投稿",
"warning": "ShareGPTに会話を投稿すると、誰でもアクセスして閲覧できるようになることに注意してください。一度投稿すると、会話は非表示にできず、削除もできません。また、他の人がアーカイブや共有する可能性があります。このプラットフォームで機密性のある情報や個人情報を共有しないように注意してください。"
},
"newFolder": "新しいフォルダー",
"cloneChat": "チャットのコピーを作成",
"cloned": "完了しました",
"enterToSubmit": "Enterキーを押して送信",
"submitPlaceholder": "メッセージを入力するか、[/] をクリックしてプロンプトを表示します..."
}
================================================
FILE: public/locales/ja/model.json
================================================
{
"configuration": "設定",
"model": "モデル",
"token": {
"label": "最大トークン数",
"description": "チャット完了時に生成するトークンの最大数。入力トークンと生成されたトークンの合計長は、モデルのコンテキスト長で制限されます。"
},
"default": "デフォルト",
"temperature": {
"label": "温度",
"description": "使用するサンプリング温度。0から2までの間で指定します。0.8などの高い値は、出力をよりランダムにします。一方、0.2などの低い値は、より焦点を絞って決定論的にします。通常、これまたはtop pを変更することをお勧めしますが、両方を変更しないでください。(デフォルト:1)"
},
"presencePenalty": {
"label": "存在ペナルティ",
"description": "-2.0から2.0までの数値。正の値は、新しいトークンがテキストに現れるかどうかに基づいて新しいトピックについて話すモデルの可能性を高めるため、新しいトークンにペナルティを課します。(デフォルト:0)"
},
"topP": {
"label": "トップp",
"description": "0から1の数値。温度を使ったサンプリングの代わりに、モデルはトップp確率質量を持つトークンの結果を考慮する核サンプリングと呼ばれる手法を使用します。つまり、0.1は確率質量の上位10%を占めるトークンのみが考慮されます。通常、これまたは温度のどちらか一方を変更することをお勧めします。(デフォルト:1)"
},
"frequencyPenalty": {
"label": "頻度ペナルティ",
"description": "-2.0から2.0の数値。正の値は、テキスト内での新しいトークンの既存の頻度に基づいて新しいトークンにペナルティを課し、同じ行をそのまま繰り返す可能性を減らします。(デフォルト:0)"
},
"defaultChatConfig": "デフォルトチャット設定",
"defaultSystemMessage": "デフォルトシステムメッセージ",
"resetToDefault": "デフォルトにリセット"
}
================================================
FILE: public/locales/ms/about.json
================================================
{
"description": "Better ChatGPT merupakan aplikasi web sumber terbuka yang menakjubkan yang membolehkan anda bermain dengan API ChatGPT OpenAI secara percuma!",
"sourceCode": "Lihat <0>kod sumber</0> di GitHub dan beri ia ⭐️!",
"initiative": {
"description": "Lihat <0><i>Inisiatif ChatGPT Terbuka</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Sokongan",
"paragraph1": "Di Better ChatGPT, kami berusaha untuk menyediakan anda dengan ciri-ciri berguna dan menakjubkan sepanjang masa. Dan seperti mana-mana projek, sokongan dan motivasi anda akan membantu kami untuk terus maju!",
"paragraph2": "Jika anda menikmati penggunaan aplikasi kami, kami dengan rendah hati meminta anda memberi <0>projek</0> ini ⭐️. Dukungan anda sangat bermakna kepada kami dan mendorong kami untuk bekerja lebih keras dalam menyediakan pengalaman terbaik.",
"paragraph3": "Jika anda ingin menyokong pasukan kami, pertimbangkan untuk menaja kami melalui salah satu kaedah di bawah. Setiap sumbangan, tidak kira seberapa kecil, membantu kami untuk mengekalkan dan meningkatkan perkhidmatan kami.",
"paragraph4": "Terima kasih kerana menjadi sebahagian daripada komuniti kami, dan kami tidak sabar untuk melayani anda dengan lebih baik pada masa hadapan.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Server Discord",
"paragraph1": "Kami menjemput anda untuk menyertai komuniti Discord kami! Server Discord kami adalah tempat yang hebat untuk bertukar idea dan petua ChatGPT, serta mengemukakan permintaan ciri untuk Better ChatGPT. Anda akan berpeluang berinteraksi dengan para pembangun di sebalik Better ChatGPT serta peminat AI lain yang berkongsi minat anda.",
"paragraph2": "Untuk menyertai server kami, hanya klik pautan berikut: <0>https://discord.gg/g3Qnwy4V6A</0>. Kami tidak sabar untuk melihat anda di sana!"
},
"privacyStatement": {
"title": "Kenyataan Privasi",
"paragraph1": "Kami sangat menghargai privasi anda dan komited untuk melindungi privasi pengguna kami. Kami tidak mengumpul atau menyimpan teks yang anda masukkan atau terima dari pelayan OpenAI dalam bentuk apa pun. Kod sumber kami boleh diakses untuk pemeriksaan anda bagi mengesahkan kenyataan ini.",
"paragraph2": "Kami mengutamakan keselamatan kunci API anda dan mengendalikannya dengan penuh berhati-hati. Jika anda menggunakan kunci API anda sendiri, kunci tersebut hanya disimpan di pelayar anda dan tidak dikongsi dengan mana-mana entiti pihak ketiga. Ia hanya digunakan untuk tujuan yang dimaksudkan, iaitu mengakses API OpenAI dan bukan untuk penggunaan yang tidak sah."
}
}
================================================
FILE: public/locales/ms/api.json
================================================
{
"securityMessage": "Kami mengutamakan keselamatan kunci API anda dan mengendalikannya dengan penuh berhati-hati. Kunci anda disimpan secara eksklusif di pelayar anda dan tidak pernah dikongsi dengan mana-mana entiti pihak ketiga. Ia hanya digunakan untuk tujuan yang dimaksudkan untuk mengakses API OpenAI dan bukan untuk penggunaan yang tidak sah.",
"apiEndpoint": {
"inputLabel": "Hujung API",
"description": "Apabila anda memilih hujung nyawa API yang tidak rasmi, ia pada dasarnya berfungsi sebagai proksi. Proksi berfungsi dengan bertindak sebagai perantara di antara peranti anda dan pelayan destinasi, dalam kes ini, API OpenAI. Dengan berbuat demikian, ia membolehkan anda mengakses API OpenAI di kawasan di mana ia mungkin sebaliknya terhad.",
"warn": "Selain itu, jika anda menyediakan hujung nyawa API tersendiri yang memberikan akses percuma ke API OpenAI, anda boleh menggunakan ChatGPT tanpa perlu menyediakan kunci API dengan hanya meninggalkan medan kunci API kosong. Walau bagaimanapun, amat penting untuk berhati-hati semasa menggunakan hujung nyawa API pihak ketiga, kerana yang tidak boleh dipercayai mungkin merekodkan maklumat peribadi anda dalam perbualan. Sentiasa sahkan kebolehpercayaan hujung nyawa API sebelum menggunakannya untuk melindungi privasi dan keselamatan anda."
},
"apiKey": {
"howTo": "Dapatkan kunci API peribadi anda <0>di sini</0>.",
"inputLabel": "Kunci API"
},
"customEndpoint": "Gunakan hujung API tersuai",
"advancedConfig": "Lihat konfigurasi API lanjutan <0>di sini</0>",
"noApiKeyWarning": "Tiada kunci API yang dibekalkan! Sila periksa tetapan API anda."
}
================================================
FILE: public/locales/ms/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/ms/main.json
================================================
{
"save": "Simpan",
"generate": "Hasilkan",
"cancel": "Batal",
"confirm": "Sahkan",
"warning": "Amaran",
"clearMessageWarning": "Sila ambil perhatian bahawa dengan menghantar mesej ini, semua mesej seterusnya akan dipadam!",
"clearConversationWarning": "Sila ambil perhatian bahawa dengan mengesahkan tindakan ini, semua mesej akan dipadam!",
"clearConversation": "Padam Perbualan",
"import": "Import",
"export": "Eksport",
"author": "Dibuat oleh Jing Hua",
"about": "Mengenai & Penaja",
"api": "API",
"personal": "Peribadi",
"free": "Percuma",
"downloadChat": "Muat Turun Perbualan",
"user": "Pengguna",
"assistant": "Pembantu",
"system": "Sistem",
"newChat": "Perbualan Baru",
"lightMode": "Mod Terang",
"darkMode": "Mod Gelap",
"setting": "Tetapan",
"image": "Imej",
"autoTitle": "Jana tajuk secara automatik",
"advancedMode": "Mod lanjutan",
"inlineLatex": "Latex Sebaris",
"prompt": "Arahan",
"promptLibrary": "Pustaka Arahan",
"name": "Nama",
"search": "Cari",
"total": "Jumlah",
"resetCost": "Reset Kos",
"countTotalTokens": "Kira jumlah token keseluruhan",
"morePrompts": "Anda boleh mencari lebih banyak arahan di sini: ",
"clearPrompts": "Kosongkan arahan",
"postOnShareGPT": {
"title": "Siarkan di ShareGPT",
"warning": "Sila ambil perhatian bahawa dengan menyiarkan perbualan anda di ShareGPT, ia akan menjadi boleh diakses dan dilihat oleh sesiapa sahaja. Setelah disiarkan, perbualan tidak boleh disembunyikan atau dipadam, dan mungkin diarkibkan atau dikongsi oleh orang lain. Kami menasihatkan anda untuk mempertimbangkan dengan teliti dan mengelakkan berkongsi maklumat sensitif atau peribadi di platform ini."
},
"newFolder": "Folder Baru",
"cloneChat": "Buat salinan perbualan ini",
"cloned": "Dicipta",
"enterToSubmit": "Tekan Enter untuk hantar",
"submitPlaceholder": "Taip mesej atau klik [/] untuk arahan..."
}
================================================
FILE: public/locales/ms/model.json
================================================
{
"configuration": "Konfigurasi",
"model": "Model",
"token": {
"label": "Token Maksimum",
"description": "Jumlah token maksimum untuk dijana dalam lengkapan sembang. Panjang keseluruhan token input dan token yang dijana adalah terhad oleh panjang konteks model."
},
"default": "Lalai",
"temperature": {
"label": "Suhu",
"description": "Suhu pensampelan yang digunakan, antara 0 dan 2. Nilai yang lebih tinggi seperti 0.8 akan menjadikan keluaran lebih rawak, manakala nilai yang lebih rendah seperti 0.2 akan menjadikannya lebih terarah dan deterministik. Kami secara umumnya mengesyorkan mengubah ini atau atas p tetapi bukan kedua-duanya. (Lalai: 1)"
},
"presencePenalty": {
"label": "Hukuman Kehadiran",
"description": "Nombor antara -2.0 dan 2.0. Nilai positif menghukum token baru berdasarkan sama ada mereka muncul dalam teks sejauh ini, meningkatkan kemungkinan model untuk bercakap mengenai topik baru. (Lalai: 0)"
},
"topP": {
"label": "Top-p",
"description": "Nombor antara 0 dan 1. Alternatif kepada pensampelan dengan suhu, dipanggil pensampelan nukleus, di mana model mempertimbangkan hasil token dengan jisim kebarangkalian top p. Jadi 0.1 bermaksud hanya token yang terdiri daripada 10% jisim kebarangkalian teratas dipertimbangkan. Secara umumnya, kami mengesyorkan untuk mengubah suhu atau nilai paling atas tetapi bukan kedua-duanya. (Lalai: 1)"
},
"frequencyPenalty": {
"label": "Penalti Frekuensi",
"description": "Nombor antara -2.0 dan 2.0. Nilai positif memberi hukuman kepada token baru berdasarkan frekuensi sedia ada mereka dalam teks sejauh ini, mengurangkan kebarangkalian model untuk mengulangi baris yang sama secara harfiah. (Lalai: 0)"
},
"defaultChatConfig": "Konfigurasi Cakap Lalai",
"defaultSystemMessage": "Mesej Sistem Lalai",
"resetToDefault": "Set Semula ke Lalai"
}
================================================
FILE: public/locales/nb/about.json
================================================
{
"description": "Better ChatGPT er en fantastisk åpen kildekode web-app som lar deg leke med OpenAI's ChatGPT API gratis!",
"sourceCode": "Sjekk ut <0>kildekoden</0> på GitHub og gi den en ⭐️!",
"initiative": {
"description": "Sjekk ut <0><i>Open ChatGPT Initiative</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Støtte",
"paragraph1": "På Better ChatGPT streber vi etter å tilby deg nyttige og fantastiske funksjoner døgnet rundt. Akkurat som alle prosjekter, vil din støtte og motivasjon være avgjørende for å hjelpe oss å fortsette fremover!",
"paragraph2": "Hvis du har likt å bruke appen vår, ber vi deg vennligst om å gi dette <0>prosjektet</0> en ⭐️. Din støtte betyr mye for oss og oppmuntrer oss til å jobbe hardere mot å levere den beste mulige opplevelsen.",
"paragraph3": "Hvis du ønsker å støtte teamet, kan du vurdere å sponse oss gjennom en av metodene nedenfor. Hver bidrag, uansett hvor lite, hjelper oss med å opprettholde og forbedre tjenesten vår.",
"paragraph4": "Takk for at du er en del av samfunnet vårt, og vi ser frem til å betjene deg bedre i fremtiden.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord Server",
"paragraph1": "Vi inviterer deg til å bli med i Discord-samfunnet vårt! Discord-serveren vår er et flott sted å utveksle ChatGPT-ideer og tips, og sende inn funksjonsforespørsler for Better ChatGPT. Du får muligheten til å samhandle med utviklerne bak Better ChatGPT, samt andre AI-entusiaster som deler lidenskapen din.",
"paragraph2": "For å bli med på serveren vår, klikk bare på følgende lenke: <0>https://discord.gg/g3Qnwy4V6A</0>. Vi gleder oss til å se deg der!"
},
"privacyStatement": {
"title": "Personvernerklæring",
"paragraph1": "Vi verdsetter personvernet ditt høyt og er forpliktet til å beskytte personvernet til brukerne våre. Vi samler ikke inn eller lagrer noen tekst du skriver inn eller mottar fra OpenAI-serveren i noen form. Kildekoden vår er tilgjengelig for din inspeksjon for å bekrefte denne uttalelsen.",
"paragraph2": "Vi prioriterer sikkerheten til API-nøkkelen din og behandler den med største forsiktighet. Hvis du bruker din egen API-nøkkel, lagres nøkkelen utelukkende pånettleseren din og deles aldri med noen tredjeparts enhet. Den brukes kun for det tiltenkte formålet med å få tilgang til OpenAI API og ikke for noen annen uautorisert bruk."
}
}
================================================
FILE: public/locales/nb/api.json
================================================
{
"securityMessage": "Vi prioriterer sikkerheten til API-nøkkelen din og behandler den med største forsiktighet. Nøkkelen din er kun lagret i nettleseren din og deles aldri med noen tredjeparts enhet. Den brukes utelukkende for det tiltenkte formålet med å få tilgang til OpenAI API og ikke for annen uautorisert bruk.",
"apiEndpoint": {
"inputLabel": "API-endepunkt",
"description": "Når du velger et uoffisielt API-endepunkt, fungerer det som en proxy. En proxy fungerer ved å opptre som et mellomledd mellom enheten din og destinasjonsserveren, i dette tilfellet OpenAI API-et. Ved å gjøre dette, gjør det deg i stand til å få tilgang til OpenAI API-et i regioner hvor det ellers kunne være begrenset.",
"warn": "I tillegg, hvis du oppgir et egendefinert API-endepunkt som gir gratis tilgang til OpenAI API-et, kan du bruke ChatGPT uten behov for å oppgi en API-nøkkel ved å ganske enkelt la API-nøkkelfeltet stå tomt. Det er imidlertid viktig å være forsiktig når du bruker tredjeparts API-endepunkter, ettersom upålitelige kan logge personlig informasjon i samtaler. Bekreft alltid påliteligheten til et API-endepunkt før du bruker det for å beskytte personvernet og sikkerheten din."
},
"apiKey": {
"howTo": "Få din personlige API-nøkkel <0>her</0>.",
"inputLabel": "API-nøkkel"
},
"customEndpoint": "Bruk egendefinert API-endepunkt",
"advancedConfig": "Vis avansert API-konfigurasjon <0>her</0>",
"noApiKeyWarning": "Ingen API-nøkkel angitt! Vennligst sjekk API-innstillingene dine."
}
================================================
FILE: public/locales/nb/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/nb/main.json
================================================
{
"save": "Lagre",
"generate": "Generere",
"cancel": "Avbryt",
"confirm": "Bekreft",
"warning": "Advarsel",
"clearMessageWarning": "Vær oppmerksom på at ved å sende inn denne meldingen, vil alle påfølgende meldinger bli slettet!",
"clearConversationWarning": "Vær oppmerksom på at ved å bekrefte denne handlingen, vil alle meldinger bli slettet!",
"clearConversation": "Tøm samtale",
"import": "Importer",
"export": "Eksporter",
"author": "Laget av Jing Hua",
"about": "Om & Sponsor",
"api": "API",
"personal": "Personlig",
"free": "Gratis",
"downloadChat": "Last ned Chat",
"user": "Bruker",
"assistant": "Assistent",
"system": "System",
"newChat": "Ny Chat",
"lightMode": "Lys Modus",
"darkMode": "Mørk Modus",
"setting": "Innstillinger",
"image": "Bilde",
"autoTitle": "Auto generer tittel",
"advancedMode": "Avansert modus",
"inlineLatex": "Inline Latex",
"prompt": "Oppgave",
"promptLibrary": "Oppgavebibliotek",
"name": "Navn",
"search": "Søk",
"total": "Totalt",
"resetCost": "Tilbakestill kostnader",
"countTotalTokens": "Tell totale token",
"morePrompts": "Du kan finne flere oppgaver her: ",
"clearPrompts": "Tøm oppgave",
"postOnShareGPT": {
"title": "Innlegg på ShareGPT",
"warning": "Vær oppmerksom på at ved å poste samtalen din på ShareGPT, vil den bli offentlig tilgjengelig og synlig for alle. Når den er postet, kan samtalen ikke skjules eller slettes, og den kan bli arkivert eller delt av andre. Vi anbefaler deg å tenke nøye gjennom og unngå å dele sensitiv eller privat informasjon på denne plattformen."
},
"newFolder": "Ny mappe",
"cloneChat": "Klone chat",
"cloned": "Klonet",
"enterToSubmit": "Trykk enter for å sende",
"submitPlaceholder": "Skriv en melding eller klikk på [/] for oppgave..."
}
================================================
FILE: public/locales/nb/model.json
================================================
{
"configuration": "Konfigurasjon",
"model": "Modell",
"token": {
"label": "Maks Token",
"description": "Maksimalt antall tokens som skal genereres i chat fullføringen. Den totale lengden av inndata-tokens og genererte tokens er begrenset av modellens kontekstlengde."
},
"default": "Standard",
"temperature": {
"label": "Temperatur",
"description": "Hvilken prøvetakingstemperatur du skal bruke, mellom 0 og 2. Høyere verdier som 0,8 vil gjøre utdataene mer tilfeldige, mens lavere verdier som 0,2 vil gjøre dem mer fokuserte og deterministiske. Vi anbefaler generelt å endre dette eller topp-p, men ikke begge. (Standard: 1)"
},
"presencePenalty": {
"label": "Tilstedeværelsesstraff",
"description": "Tall mellom -2,0 og 2,0. Positive verdier straffer nye tokens basert på om de vises i teksten så langt, noe som øker modellens sannsynlighet for å snakke om nye emner. (Standard: 0)"
},
"topP": {
"label": "Topp-p",
"description": "Tall mellom 0 og 1. Et alternativ til prøvetaking med temperatur, kalt kjernesampling, der modellen vurderer resultatene av tokens med topp-p sannsynlighetsmasse. Så 0,1 betyr at bare tokens som utgjør de øverste 10% sannsynlighetsmassene blir vurdert. Vi anbefaler generelt å endre dette eller temperaturen, men ikke begge. (Standard: 1)"
},
"frequencyPenalty": {
"label": "Frekvensstraff",
"description": "Tall mellom -2,0 og 2,0. Positive verdier straffer nye tokens basert på deres eksisterende frekvens i teksten så langt, noe som reduserer modellens sannsynlighet for å gjenta samme linje ordrett. (Standard: 0)"
},
"defaultChatConfig": "Standard Chat-konfigurasjon",
"defaultSystemMessage": "Standard Systemmelding",
"resetToDefault": "Tilbakestill til standard"
}
================================================
FILE: public/locales/ro/about.json
================================================
{
"description": "Better ChatGPT este o aplicație web uimitoare cu sursă deschisă care vă permite să vă jucați gratuit cu API-ul ChatGPT al OpenAI!",
"sourceCode": "Verifică <0>codul sursă</0> pe GitHub și dă-i un ⭐️!",
"initiative": {
"description": "Verificați <0><i>Inițiativa Deschide ChatGPT</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Suport",
"paragraph1": "La Better ChatGPT, ne străduim să vă oferim funcții utile și uimitoare non-stop. Și, la fel ca orice proiect, sprijinul și motivația dvs. vor fi esențiale pentru a ne ajuta să continuăm înainte!",
"paragraph2": "Dacă v-a plăcut să utilizați aplicația noastră, vă rugăm să acordați un ⭐️ acestui <0>proiect</0>. Susținerea dvs. înseamnă foarte mult pentru noi și ne încurajează să muncim mai mult pentru a oferi cea mai bună experiență posibilă. .",
"paragraph3": "Dacă doriți să susțineți echipa, luați în considerare să ne sponsorizați prin una dintre metodele de mai jos. Fiecare contribuție, oricât de mică, ne ajută să ne menținem și să îmbunătățim serviciul.",
"paragraph4": "Vă mulțumim că faceți parte din comunitatea noastră și așteptăm cu nerăbdare să vă servim mai bine în viitor.",
"alipay": "Alipay",
"wechatPay": "WeChat Pay"
},
"discordServer": {
"title": "Server Discord",
"paragraph1": "Vă invităm să vă alăturați comunității noastre Discord! Serverul nostru Discord este un loc minunat pentru a face schimb de idei și sfaturi ChatGPT și pentru a trimite solicitări de funcții pentru Better ChatGPT. Veți avea ocazia să interacționați cu dezvoltatorii din spatele Better ChatGPT. precum și alți entuziaști AI care vă împărtășesc pasiunea.",
"paragraph2": "Pentru a vă alătura serverului nostru, faceți clic pe următorul link: <0>https://discord.gg/g3Qnwy4V6A</0>. Abia așteptăm să ne vedem acolo!"
},
"privacyStatement": {
"title": "Declarație de confidențialitate",
"paragraph1": "Apreciem foarte mult confidențialitatea dumneavoastră și ne angajăm să protejăm confidențialitatea utilizatorilor noștri. Nu colectăm și nu stocăm niciun text pe care îl introduceți sau primiți de la serverul OpenAI sub nicio formă. Codul nostru sursă este disponibil pentru inspecția dvs. pentru verificați această afirmație.",
"paragraph2": "Prioritatezăm securitatea cheii dvs. API și o gestionăm cu cea mai mare atenție. Dacă utilizați propria cheie API, cheia dvs. este stocată exclusiv în browser și nu este niciodată partajată cu nicio entitate terță parte. Este folosită exclusiv pentru scopul propus de a accesa API-ul OpenAI și nu pentru orice altă utilizare neautorizată."
}
}
================================================
FILE: public/locales/ro/api.json
================================================
{
"securityMessage": "Prioritizează securitatea cheii tale API și o gestionăm cu cea mai mare atenție. Cheia este stocată exclusiv în browser-ul tău și nu este niciodată partajată cu vreo entitate terță. Este folosită exclusiv în scopul propus de a accesa OpenAI API și nu pentru orice altă utilizare neautorizată.",
"apiEndpoint": {
"inputLabel": "Punctul final API",
"description": "Când alegeți un punct final API neoficial, acesta funcționează ca un proxy. Un proxy funcționează ca intermediar între dispozitivul dvs. și serverul de destinație, în acest caz, API-ul OpenAI. Procedând astfel, vă permite pentru a accesa API-ul OpenAI în regiuni în care altfel ar putea fi restricționat.",
"warn": "În plus, dacă furnizați un punct final API personalizat care oferă acces gratuit la API-ul OpenAI, puteți utiliza ChatGPT fără a fi nevoie să furnizați o cheie API, pur și simplu lăsând câmpul cheie API necompletat. Cu toate acestea, este esențial să fiți prudenți atunci când utilizați puncte finale API terțe, deoarece cele nedemne de încredere vă pot înregistra informațiile personale în conversații. Verificați întotdeauna fiabilitatea unui punct final API înainte de a-l folosi pentru a vă proteja confidențialitatea și securitatea."
},
"apiKey": {
"howTo": "Obțineți cheia personală API <0>aici</0>.",
"inputLabel": "Cheie API"
},
"customEndpoint": "Utilizați un punct final API personalizat",
"advancedConfig": "Vedeți configurația avansată API <0>aici</0>",
"noApiKeyWarning": "Nu a fost furnizată nicio cheie API! Vă rugăm să verificați setările API."
}
================================================
FILE: public/locales/ro/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Sincronizați fără efort chaturile și setările cu Google Drive.",
"buton": {
"sync": "Sincronizează-ți chaturile",
"stop": "Opriți sincronizarea",
"create": "Creați un fișier nou",
"confirm": "Confirmați selecția"
},
"notice": "Notă: va trebui să vă reconectați la fiecare vizită sau la fiecare oră. Pentru a evita suprascrierea datelor din cloud, nu utilizați Better ChatGPT pe mai multe dispozitive în același timp.",
"privacy": "Confidențialitatea ta este importantă pentru noi și, pentru a o asigura, Better ChatGPT are doar acces non-sensibil, ceea ce înseamnă că poate crea, vizualiza și gestiona doar propriile fișiere și foldere.",
"toast": {
"sync": "Sincronizare reușită!",
"stop": "Sincronizare oprită"
}
}
================================================
FILE: public/locales/ro/main.json
================================================
{
"save": "Salvează",
"generate": "Generează",
"cancel": "Anulează",
"confirm": "Confirmați",
"warning": "Avertisment",
"clearMessageWarning": "Vă rugăm să fiți informat că prin trimiterea acestui mesaj, toate mesajele ulterioare vor fi șterse!",
"clearConversationWarning": "Vă rugăm să fiți informat că prin confirmarea acestei acțiuni, toate mesajele vor fi șterse!",
"clearConversation": "Ștergeți istoricul conversațiilor",
"import": "Import",
"export": "Export",
"author": "Făcut de Jing Hua",
"about": "Despre și sponsorizează",
"api": "API",
"personal": "Personal",
"free": "Gratuit",
"downloadChat": "Descărcați chat",
"user": "Utilizator",
"assistant": "Asistent",
"system": "Sistem",
"newChat": "Chat nou",
"lightMode": "Mod de lumină",
"darkMode": "Mod întunecat",
"setting": "Setări",
"image": "Imagine",
"autoTitle": "Generează automat titlul",
"advancedMode": "Mod avansat",
"inlineLatex": "Latex în linie",
"prompt": "Prompt",
"promptLibrary": "Prompt Library",
"name": "Nume",
"search": "Căutare",
"total": "Total",
"resetCost": "Resetați costurile",
"countTotalTokens": "Numără numărul total de jetoane",
"morePrompts": "Puteți găsi mai multe solicitări aici: ",
"clearPrompts": "Ștergeți solicitările",
"postOnShareGPT": {
"title": "Postați pe ShareGPT",
"warning": "Vă rugăm să rețineți că, prin postarea conversației dvs. pe ShareGPT, aceasta va deveni accesibilă public și va fi vizibilă pentru oricine. Odată postată, conversația nu poate fi ascunsă sau ștearsă și poate fi arhivată sau partajată de alții. Vă sfătuim să faceți luați în considerare cu atenție și evitați partajarea informațiilor sensibile sau private pe această platformă."
},
"newFolder": "Folder nou",
"cloneChat": "Clone Chat",
"cloned": "Clonat",
"enterToSubmit": "Intrați pentru a trimite",
"submitPlaceholder": "Tastați un mesaj sau faceți clic pe [/] pentru solicitări..."
}
================================================
FILE: public/locales/ro/model.json
================================================
{
"configuration": "Configurare",
"model": "Model",
"token": {
"label": "Token maxim",
"description": "Numărul maxim de jetoane de generat la finalizarea chat-ului. Lungimea totală a jetoanelor de intrare și a jetoanelor generate este limitată de lungimea contextului modelului."
},
"default": "Implicit",
"temperatura": {
"label": "Temperatura",
"description": "Ce temperatură de eșantionare să folosiți, între 0 și 2. Valorile mai mari, cum ar fi 0,8, vor face ieșirea mai aleatorie, în timp ce valori mai mici, cum ar fi 0,2, o vor face mai concentrată și deterministă. În general, vă recomandăm să modificați acest lucru sau p superior, dar nu ambele. (Implicit: 1)"
},
"presencePenalty": {
"label": "Penalizare de prezență",
"description": "Număr între -2,0 și 2,0. Valorile pozitive penalizează noile jetoane în funcție de faptul dacă acestea apar în text până acum, crescând probabilitatea modelului de a vorbi despre noi subiecte. (Implicit: 0)"
},
"topP": {
"label": "Top-p",
"description": "Număr între 0 și 1. O alternativă la eșantionarea cu temperatură, numită eșantionare nucleu, în care modelul ia în considerare rezultatele jetoanelor cu masa de probabilitate maximă p. Deci 0,1 înseamnă doar jetoanele care cuprind masa de top 10% probabilitate sunt luate în considerare. În general, recomandăm modificarea acestei temperaturi sau a temperaturii, dar nu a ambelor. (Implicit: 1)"
},
"frequencyPenalty": {
"label": "Penalizare de frecvență",
"description": "Număr între -2,0 și 2,0. Valorile pozitive penalizează noile jetoane pe baza frecvenței lor existente în text până acum, scăzând probabilitatea modelului de a repeta literal același rând. (Implicit: 0)"
},
"defaultChatConfig": "Configurație implicită de chat",
"defaultSystemMessage": "Mesaj implicit de sistem",
"resetToDefault": "Resetați la valoarea implicită"
}
================================================
FILE: public/locales/ru/about.json
================================================
{
"description": "Better ChatGPT - это потрясающее открытое веб-приложение, позволяющее вам бесплатно использовать API ChatGPT от OpenAI!",
"sourceCode": "Ознакомьтесь с <0>исходным кодом</0> на GitHub и поставьте ему ⭐️!",
"initiative": {
"description": "Ознакомьтесь с <0><i>Инициативой Open ChatGPT</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Поддержка",
"paragraph1": "В Better ChatGPT мы стремимся предоставлять вам удивительные возможности круглосуточно. И, как и в любом проекте, ваша поддержка и мотивация играют важную роль в нашем развитии!",
"paragraph2": "Если вам понравилось наше приложение, удостойте его <0>⭐️</0>. Ваше одобрение очень значимо для нас и мотивирует продолжать развивать лучший пользовательский опыт.",
"paragraph3": "Если вы хотите поддержать команду, рассмотрите возможность спонсирования через один из представленных ниже методов. Любая помощь, даже самая маленькая, способствует улучшению нашего сервиса.",
"paragraph4": "Спасибо, что являетесь частью нашего сообщества, и мы с нетерпением ждем возможности служить вам лучше в будущем.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord сервер",
"paragraph1": "Приглашаем вас присоединиться к нашему сообществу Discord! Наш сервер в Discord - отличное место для обмена идеями и советами по ChatGPT, а также для отправки пожеланий на развитие Better ChatGPT. Общайтесь с разработчиками Better ChatGPT и другими энтузиастами искусственного интеллекта, разделяющими вашу страсть.",
"paragraph2": "Чтобы присоединиться к нашему серверу, перейдите по следующей ссылке: <0>https://discord.gg/g3Qnwy4V6A</0>. Ждем вас с нетерпением!"
},
"privacyStatement": {
"title": "Заявление о конфиденциальности",
"paragraph1": "Ваша конфиденциальность важна для нас, и мы стремимся гарантировать защиту данных наших пользователей. Мы никаким образом не собираем или храним текст, отправленный или полученный от сервера OpenAI. Наш исходный код открыт для проверки этого утверждения.",
"paragraph2": "Мы очень внимательно относимся к безопасности вашего API-ключа и обрабатываем его с максимальной ответственностью. При использовании собственного ключа API, ваш ключ хранится только в вашем браузере и недоступен третьим сторонам. Он используется исключительно для предоставления доступа к API OpenAI без применения для других несанкционированных действий."
}
}
================================================
FILE: public/locales/ru/api.json
================================================
{
"securityMessage": "Мы приоритизируем безопасность вашего API-ключа и обращаемся с ним с максимальной осторожностью. Ваш ключ хранится исключительно в вашем браузере и никогда не передается третьим лицам. Он используется только для предполагаемого доступа к API OpenAI и не применяется для других несанкционированных действий.",
"apiEndpoint": {
"inputLabel": "API Endpoint",
"description": "Когда вы выбираете неофициальный конечный пункт API, он функционирует в качестве прокси. Прокси работает, выступая в качестве посредника между вашим устройством и сервером назначения, в данном случае - API OpenAI. Таким образом, это позволяет вам получить доступ к API OpenAI в регионах, где он может быть ограничен.",
"warn": "Кроме того, если вы предоставите собственный конечный пункт API, который предоставляет бесплатный доступ к API OpenAI, вы можете использовать ChatGPT без необходимости предоставления API-ключа, оставив поле API-ключа пустым. Однако важно быть осторожными при использовании сторонних конечных точек API, так как ненадежные могут регистрировать вашу личную информацию в беседах. Всегда проверяйте надежность конечной точки API перед использованием, чтобы обеспечить вашу конфиденциальность и безопасность."
},
"apiKey": {
"howTo": "Получите ваш личный API-ключ <0>здесь</0>.",
"inputLabel": "API-ключ"
},
"customEndpoint": "Использовать пользовательский API Endpoint",
"advancedConfig": "Посмотрите расширенную конфигурацию API <0>здесь</0>",
"noApiKeyWarning": "API-ключ не указан! Пожалуйста, проверьте ваши настройки API."
}
================================================
FILE: public/locales/ru/drive.json
================================================
{
"name": "Google Синхронизация",
"tagline": "Без усилий синхронизируйте ваши чаты и настройки с Google Диском.",
"button": {
"sync": "Синхронизировать чаты",
"stop": "Остановить синхронизацию",
"create": "Создать новый файл",
"confirm": "Подтвердить выбор"
},
"notice": "Примечание: Вам потребуется повторный вход при каждом посещении или каждый час. Чтобы избежать перезаписи данных облачного хранения, не используйте Better ChatGPT одновременно на нескольких устройствах.",
"privacy": "Ваша конфиденциальность важна для нас, и чтобы обеспечить ее, Better ChatGPT имеет доступ только с низким уровнем чувствительности, что означает, что он может только создавать, просматривать и управлять своими собственными файлами и папками.",
"toast": {
"sync": "Синхронизация успешно выполнена!",
"stop": "Синхронизация остановлена"
}
}
================================================
FILE: public/locales/ru/main.json
================================================
{
"save": "Сохранить",
"generate": "Генерировать",
"cancel": "Отмена",
"confirm": "Подтвердить",
"warning": "Предупреждение",
"clearMessageWarning": "Обратите внимание, что после отправки этого сообщения все последующие сообщения будут удалены!",
"clearConversationWarning": "Обратите внимание, что подтверждение этого действия приведет к удалению всех сообщений!",
"clearConversation": "Очистить историю разговора",
"import": "Импорт",
"export": "Экспорт",
"author": "Автор: Jing Hua",
"about": "О программе и спонсоре",
"api": "API",
"personal": "Личный",
"free": "Бесплатный",
"downloadChat": "Скачать чат",
"user": "Пользователь",
"assistant": "Ассистент",
"system": "Система",
"newChat": "Новый чат",
"lightMode": "Светлый режим",
"darkMode": "Темный режим",
"setting": "Настройки",
"image": "Изображение",
"autoTitle": "Автоматическое создание заголовка",
"advancedMode": "Расширенный режим",
"inlineLatex": "Встроенный Latex",
"prompt": "Подсказка",
"promptLibrary": "Библиотека подсказок",
"name": "Имя",
"search": "Поиск",
"total": "Всего",
"resetCost": "Сбросить стоимость",
"countTotalTokens": "Посчитать общее количество токенов",
"morePrompts": "Больше подсказок вы можете найти здесь: ",
"clearPrompts": "Очистить подсказки",
"postOnShareGPT": {
"title": "Опубликовать на ShareGPT",
"warning": "Обратите внимание, что публикация вашей беседы на ShareGPT сделает ее общедоступной и видимой для всех. После публикации беседу нельзя скрыть или удалить, и другие могут архивировать или делиться ею. Мы советуем вам тщательно подумать и избегать обмена конфиденциальной или частной информацией на этой платформе."
},
"newFolder": "Новая папка",
"cloneChat": "Клонировать чат",
"cloned": "Клонировано",
"enterToSubmit": "Нажмите Enter для отправки",
"submitPlaceholder": "Напишите сообщение или нажмите [/] для подсказок..."
}
================================================
FILE: public/locales/ru/model.json
================================================
{
"configuration": "Конфигурация",
"model": "Модель",
"token": {
"label": "Макс. токенов",
"description": "Максимальное количество токенов для генерации в чате. Общая длина входных токенов и сгенерированных токенов ограничена контекстной длиной модели."
},
"default": "По умолчанию",
"temperature": {
"label": "Температура",
"description": "Значение температуры выборки от 0 до 2. Более высокие значения, например 0.8, сделают выходной результат более случайным, в то время как более низкие значения, например 0.2, более фокусированными и детерминированными. Мы обычно рекомендуем изменять это или top-p, но не оба. (По умолчанию: 1)"
},
"presencePenalty": {
"label": "Штраф за присутствие",
"description": "Число от -2.0 до 2.0. Положительные значения штрафуют новые токены на основе их появления в тексте до этого момента, увеличивая вероятность перехода модели к новым темам. (По умолчанию: 0)"
},
"topP": {
"label": "Top-p",
"description": "Число от 0 до 1. Альтернатива выборке с температурой, называемая выборка ядра, при которой модель учитывает результаты токенов с верхним p вероятностных масс. Так, значение 0.1 означает, что рассматриваются только токены, составляющие верхние 10% вероятностной массы. Мы обычно рекомендуем изменять это или температуру, но не оба. (По умолчанию: 1)"
},
"frequencyPenalty": {
"label": "Штраф за частоту",
"description": "Число от -2.0 до 2.0. Положительные значения штрафуют новые токены на основе их имеющейся частоты в тексте на данный момент, уменьшая вероятность повторения той же строки дословно. (По умолчанию: 0)"
},
"defaultChatConfig": "Конфигурация чата по умолчанию",
"defaultSystemMessage": "Системное сообщение по умолчанию",
"resetToDefault": "Восстановить значения по умолчанию"
}
================================================
FILE: public/locales/sv/about.json
================================================
{
"description": "Better ChatGPT är en fantastisk öppen källkodswebbapp som låter dig använda OpenAI:s ChatGPT API gratis!",
"sourceCode": "Kolla in <0>källkoden</0> på GitHub och ge den en ⭐️!",
"initiative": {
"description": "Kolla in <0><i>Open ChatGPT-initiativet</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Stöd",
"paragraph1": "På Better ChatGPT strävar vi efter att erbjuda dig användbara och fantastiska funktioner dygnet runt. Precis som för alla projekt kommer ditt stöd och motivation vara avgörande för att hjälpa oss att fortsätta framåt!",
"paragraph2": "Om du har uppskattat att använda vår app, ber vi dig vänligen att ge detta <0>projekt</0> en ⭐️. Ditt stöd betyder mycket för oss och uppmuntrar oss att arbeta hårdare för att erbjuda den bästa möjliga upplevelsen.",
"paragraph3": "Om du vill stödja teamet kan du överväga att sponsra oss genom en av metoderna nedan. Varje bidrag, oavsett hur litet, hjälper oss att underhålla och förbättra vår tjänst.",
"paragraph4": "Tack för att du är en del av vår gemenskap och vi ser fram emot att betjäna dig bättre i framtiden.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Discord-server",
"paragraph1": "Vi bjuder in dig att gå med i vår Discord-community! Vår Discord-server är en utmärkt plats att utbyta ChatGPT-idéer och tips samt skicka in funktionsförfrågningar för Better ChatGPT. Du får möjlighet att interagera med utvecklarna bakom Better ChatGPT samt andra AI-entusiaster som delar din passion.",
"paragraph2": "För att gå med i vår server, klicka helt enkelt på följande länk: <0>https://discord.gg/g3Qnwy4V6A</0>. Vi ser fram emot att träffa dig där!"
},
"privacyStatement": {
"title": "Integritetspolicy",
"paragraph1": "Vi värderar din integritet högt och är engagerade i att skydda våra användares privatliv. Vi samlar inte in eller lagrar någon text du skriver in eller tar emot från OpenAI-servern i någon form. Vår källkod finns tillgänglig för din granskning för att verifiera detta påstående.",
"paragraph2": "Vi prioriterar säkerheten för din API-nyckel och hanterar den med största omsorg. Om du använder din egen API-nyckel lagras din nyckel uteslutande i din webbläsare och delas aldrig med någon tredjepartsaktör. Den används enbart för det avsedda syftet att få tillgång till OpenAI API och inte för någon annan obehörig användning."
}
}
================================================
FILE: public/locales/sv/api.json
================================================
{
"securityMessage": "Vi prioriterar säkerheten för din API-nyckel och hanterar den med största omsorg. Din nyckel lagras uteslutande på din webbläsare och delas aldrig med någon tredje part. Den används enbart för det avsedda ändamålet att få tillgång till OpenAI API och inte för någon annan obehörig användning.",
"apiEndpoint": {
"inputLabel": "API-slutpunkt",
"description": "När du väljer en inofficiell API-slutpunkt fungerar den som en proxy. En proxy fungerar genom att agera som mellanhand mellan din enhet och destinationsservern, i det här fallet OpenAI API. Genom att göra detta kan du få tillgång till OpenAI API i regioner där det annars kan vara begränsat.",
"warn": "Dessutom, om du anger en anpassad API-slutpunkt som ger gratis åtkomst till OpenAI API, kan du använda ChatGPT utan att behöva ange en API-nyckel genom att helt enkelt lämna API-nyckelfältet tomt. Det är dock viktigt att vara försiktig när du använder tredjeparts API-slutpunkter, eftersom opålitliga sådana kan logga din personliga information i konversationerna. Verifiera alltid tillförlitligheten hos en API-slutpunkt innan du använder den för att skydda din integritet och säkerhet."
},
"apiKey": {
"howTo": "Få din personliga API-nyckel <0>här</0>.",
"inputLabel": "API-nyckel"
},
"customEndpoint": "Använd anpassad API-slutpunkt",
"advancedConfig": "Visa avancerad API-konfiguration <0>här</0>",
"noApiKeyWarning": "Ingen API-nyckel angiven! Vänligen kontrollera dina API-inställningar."
}
================================================
FILE: public/locales/sv/drive.json
================================================
{
"name": "Google Sync",
"tagline": "Effortlessly synchronize your chats and settings with Google Drive.",
"button": {
"sync": "Sync your chats",
"stop": "Stop syncing",
"create": "Create new file",
"confirm": "Confirm selection"
},
"notice": "Note: You will need to re-login on every visit or every hour. To avoid your cloud data being overwritten, do not use Better ChatGPT on more than one device at the same time.",
"privacy": "Your privacy is important to us, and to ensure it, Better ChatGPT only has non-sensitive access, meaning it can only create, view, and manage its own files and folders.",
"toast": {
"sync": "Sync successful!",
"stop": "Syncing stopped"
}
}
================================================
FILE: public/locales/sv/main.json
================================================
{
"save": "Spara",
"generate": "Generera",
"cancel": "Avbryt",
"confirm": "Bekräfta",
"warning": "Varning",
"clearMessageWarning": "Observera att genom att skicka detta meddelande kommer alla efterföljande meddelanden att raderas!",
"clearConversationWarning": "Observera att genom att bekräfta denna åtgärd kommer alla meddelanden att raderas!",
"clearConversation": "Rensa konversation",
"import": "Importera",
"export": "Exportera",
"author": "Skapad av Jing Hua",
"about": "Om & Sponsor",
"api": "API",
"personal": "Personlig",
"free": "Gratis",
"downloadChat": "Ladda ner chatt",
"user": "Användare",
"assistant": "Assistent",
"system": "System",
"newChat": "Ny chatt",
"lightMode": "Ljusläge",
"darkMode": "Mörkläge",
"setting": "Inställningar",
"image": "Bild",
"autoTitle": "Auto generera titel",
"advancedMode": "Avancerat läge",
"inlineLatex": "Inline Latex",
"prompt": "Uppmaning",
"promptLibrary": "Uppmaningsbibliotek",
"name": "Namn",
"search": "Sök",
"total": "Total",
"resetCost": "Återställ kostnader",
"countTotalTokens": "Räkna totala token",
"morePrompts": "Du kan hitta fler uppmaningar här: ",
"clearPrompts": "Rensa uppmaningar",
"postOnShareGPT": {
"title": "Inlägg på ShareGPT",
"warning": "Var medveten om att genom att posta din konversation på ShareGPT kommer den att bli offentligt tillgänglig och synlig för alla. När den väl är postad kan konversationen varken döljas eller raderas och kan arkiveras eller delas av andra. Vi rekommenderar dig att tänka noggrant igenom och undvika att dela känslig eller privat information på denna plattform."
},
"newFolder": "Ny mapp",
"cloneChat": "Klona chatt",
"cloned": "Klonad",
"enterToSubmit": "Tryck på Enter för att skicka",
"submitPlaceholder": "Skriv ett meddelande eller klicka på [/] för uppmaning..."
}
================================================
FILE: public/locales/sv/model.json
================================================
{
"configuration": "Konfiguration",
"model": "Modell",
"token": {
"label": "Max Token",
"description": "Det maximala antalet token att generera i chatkomplettering. Den totala längden på inmatade token och genererade token är begränsad av modellens kontextlängd."
},
"default": "Standard",
"temperature": {
"label": "Temperatur",
"description": "Vilken samplings-temperatur som ska användas, mellan 0 och 2. Högre värden som 0,8 gör utdata mer slumpmässiga, medan lägre värden som 0,2 gör dem mer fokuserade och deterministiska. Vi rekommenderar generellt att ändra detta eller topp-p, men inte båda. (Standard: 1)"
},
"presencePenalty": {
"label": "Närvarostraff",
"description": "Tal mellan -2,0 och 2,0. Positiva värden straffar nya token baserat på om de förekommer i texten hittills, vilket ökar modellens sannolikhet att prata om nya ämnen. (Standard: 0)"
},
"topP": {
"label": "Topp-p",
"description": "Tal mellan 0 och 1. Ett alternativ till samplings-temperatur, kallat kärnsampling, där modellen beaktar resultaten av token med topp-p sannolikhetsmassa. Så 0,1 innebär att endast de token som utgör de 10% högsta sannolikhetsmassan beaktas. Vi rekommenderar generellt att ändra detta eller temperatur, men inte båda. (Standard: 1)"
},
"frequencyPenalty": {
"label": "Frekvensstraff",
"description": "Tal mellan -2,0 och 2,0. Positiva värden straffar nya token baserat på deras befintliga frekvens i texten hittills, vilket minskar modellens sannolikhet att upprepa samma rad ordagrant. (Standard: 0)"
},
"defaultChatConfig": "Standard Chatkonfiguration",
"defaultSystemMessage": "Standard Systemmeddelande",
"resetToDefault": "Återställ till Standard"
}
================================================
FILE: public/locales/vi-VN/about.json
================================================
{
"description": "Better ChatGPT là một ứng dụng web nguồn mở tuyệt vời cho phép bạn sử dụng miễn phí với API ChatGPT của OpenAI!",
"sourceCode": "Hãy xem <0>mã nguồn</0> trên GitHub và cho nó ⭐️!",
"initiative": {
"description": "Hãy ghé qua <0><i>Open ChatGPT Initiative</i></0>!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "Hỗ trợ",
"paragraph1": "Tại Better ChatGPT, chúng tôi cố gắng cung cấp cho bạn các tính năng hữu ích và tuyệt vời suốt ngày đêm. Và cũng giống như bất kỳ dự án nào, sự hỗ trợ và động lực của bạn sẽ là công cụ giúp chúng tôi tiếp tục tiến về phía trước!",
"paragraph2": "Nếu bạn thích sử dụng ứng dụng của chúng tôi, chúng tôi vui lòng yêu cầu bạn cho <0>dự án</0> này một ⭐️. Sự chứng thực của bạn có ý nghĩa rất lớn đối với chúng tôi và khuyến khích chúng tôi làm việc chăm chỉ hơn để mang lại trải nghiệm tốt nhất có thể.",
"paragraph3": "Nếu bạn muốn hỗ trợ nhóm, hãy cân nhắc tài trợ cho chúng tôi thông qua một trong các phương pháp dưới đây. Mọi đóng góp dù như thế nào cũng đều giúp chúng tôi duy trì và cải thiện dịch vụ của mình.",
"paragraph4": "Cảm ơn bạn đã trở thành một phần của cộng đồng chúng tôi và chúng tôi mong muốn được phục vụ bạn tốt hơn trong tương lai.",
"alipay": "Alipay",
"wechatPay": "WeChat"
},
"discordServer": {
"title": "Máy chủ Discord",
"paragraph1": "Chúng tôi mời bạn tham gia cộng đồng Discord của chúng tôi! Máy chủ Discord của chúng tôi là nơi tuyệt vời để trao đổi ý tưởng và mẹo ChatGPT cũng như gửi yêu cầu tính năng cho ChatGPT tốt hơn. Bạn sẽ có cơ hội tương tác với các nhà phát triển đằng sau Better ChatGPT cũng như những người đam mê AI khác có chung niềm đam mê với bạn.",
"paragraph2": "Để tham gia máy chủ của chúng tôi, chỉ cần nhấp vào liên kết sau: <0>https://discord.gg/g3Qnwy4V6A</0>. Chúng tôi rất mong được gặp bạn ở đó!"
},
"privacyStatement": {
"title": "Cam kết quyền riêng tư",
"paragraph1": "Chúng tôi đánh giá cao quyền riêng tư của bạn và cam kết bảo vệ quyền riêng tư của người dùng. Chúng tôi không thu thập hoặc lưu trữ bất kỳ văn bản nào bạn nhập hoặc nhận từ máy chủ OpenAI dưới mọi hình thức. Mã nguồn của chúng tôi có sẵn để bạn kiểm tra nhằm xác minh tuyên bố này.",
"paragraph2": "Chúng tôi ưu tiên bảo mật khóa API của bạn và xử lý nó một cách cẩn thận nhất. Nếu bạn sử dụng khóa API của riêng mình, khóa của bạn sẽ được lưu trữ riêng trên trình duyệt của bạn và không bao giờ được chia sẻ với bất kỳ thực thể bên thứ ba nào. Nó chỉ được sử dụng cho mục đích truy cập API OpenAI chứ không phải cho bất kỳ mục đích sử dụng trái phép nào khác."
}
}
================================================
FILE: public/locales/vi-VN/api.json
================================================
{
"securityMessage": "Chúng tôi ưu tiên bảo mật khóa API của bạn và xử lý nó một cách cẩn thận nhất. Khóa của bạn được lưu trữ duy nhất trên trình duyệt của bạn và không bao giờ được chia sẻ với bất kỳ tổ chức bên thứ ba nào. Nó chỉ được sử dụng cho mục đích truy cập API OpenAI chứ không phải cho bất kỳ mục đích sử dụng trái phép nào khác.",
"apiEndpoint": {
"inputLabel": "Điểm cuối API",
"description": "Khi bạn chọn điểm cuối API không chính thức, nó sẽ hoạt động như một proxy. Proxy hoạt động bằng cách đóng vai trò trung gian giữa thiết bị của bạn và máy chủ đích, trong trường hợp này là API OpenAI. Bằng cách đó, nó cho phép bạn truy cập API OpenAI ở những khu vực có thể bị hạn chế.",
"warn": "Ngoài ra, nếu bạn cung cấp điểm cuối API tùy chỉnh cấp quyền truy cập miễn phí vào API OpenAI, bạn có thể sử dụng ChatGPT mà không cần cung cấp khóa API bằng cách chỉ cần để trống trường khóa API. Tuy nhiên, điều quan trọng là phải thận trọng khi sử dụng điểm cuối API của bên thứ ba, vì những điểm cuối API không đáng tin cậy có thể ghi lại thông tin cá nhân của bạn trong các cuộc trò chuyện. Luôn xác minh độ tin cậy của điểm cuối API trước khi sử dụng để bảo vệ quyền riêng tư và bảo mật của bạn."
},
"apiKey": {
"howTo": "Nhận khóa API cá nhân của bạn <0>tại đây</0>.",
"inputLabel": "Mã API"
},
"customEndpoint": "Sử dụng điểm cuối API tùy chỉnh",
"advancedConfig": "Xem cấu hình API nâng cao <0>tại đây</0>",
"noApiKeyWarning": "Không có khóa API nào được cung cấp! Vui lòng kiểm tra cài đặt API của bạn."
}
================================================
FILE: public/locales/vi-VN/drive.json
================================================
{
"name": "Đồng bộ với Google",
"tagline": "Dễ dàng đồng bộ hóa các cuộc trò chuyện và cài đặt của bạn với Google Drive.",
"button": {
"sync": "Đồng bộ hóa cuộc trò chuyện của bạn",
"stop": "Dừng đồng bộ hóa",
"create": "Tạo tập tin mới",
"confirm": "Xác nhận lựa chọn của bạn"
},
"notice": "Lưu ý: Bạn sẽ cần phải đăng nhập lại sau mỗi lần truy cập hoặc mỗi giờ. Để tránh dữ liệu đám mây của bạn bị ghi đè, không sử dụng Better ChatGPT trên nhiều thiết bị cùng một lúc.",
"privacy": "Quyền riêng tư của bạn rất quan trọng đối với chúng tôi và để đảm bảo điều đó, Better ChatGPT chỉ có quyền truy cập không nhạy cảm, nghĩa là nó chỉ có thể tạo, xem và quản lý các tệp và thư mục của riêng mình.",
"toast": {
"sync": "Đồng bộ hóa thành công!",
"stop": "Đồng bộ hóa đã dừng"
}
}
================================================
FILE: public/locales/vi-VN/main.json
================================================
{
"save": "Lưu",
"generate": "Tạo ra",
"cancel": "Hủy bỏ",
"confirm": "Xác nhận",
"warning": "Cảnh báo",
"clearMessageWarning": "Xin lưu ý rằng bằng cách gửi tin nhắn này, tất cả các tin nhắn tiếp theo sẽ bị xóa!",
"clearConversationWarning": "Xin lưu ý rằng bằng cách xác nhận hành động này, tất cả tin nhắn sẽ bị xóa!",
"clearConversation": "Xóa lịch sử trò chuyện",
"import": "Nhập",
"export": "Xuất",
"author": "Được tạo ra bởi Jing Hua",
"about": "Về chúng tôi và tài trợ",
"api": "API",
"personal": "Cá nhân",
"free": "Miễn Phí",
"downloadChat": "Tải cuộc trò chuyện",
"user": "Người dùng",
"assistant": "Trợ lý",
"system": "Hệ thống",
"newChat": "Trò chuyện mới",
"lightMode": "Chế độ sáng",
"darkMode": "Chế độ tối",
"setting": "Cài đặt",
"image": "Ảnh",
"autoTitle": "Tự động tạo tiêu đề",
"advancedMode": "Chế độ nâng cao",
"inlineLatex": "Inline Latex",
"prompt": "Lời nhắc",
"promptLibrary": "Thư viện lời nhắc",
"name": "Tên",
"search": "Tìm",
"total": "Tổng",
"resetCost": "Đặt lại giá tiền",
"countTotalTokens": "Tính tổng mã thông báo",
"morePrompts": "Bạn có thể tìm thêm nhiều lời nhắc nữa tại đây: ",
"clearPrompts": "Xóa lời nhắc",
"postOnShareGPT": {
"title": "Đăng lên ShareGPT",
"warning": "Xin lưu ý rằng bằng cách đăng cuộc trò chuyện của bạn lên ShareGPT, mọi người sẽ có thể truy cập và xem cuộc trò chuyện đó một cách công khai. Sau khi đăng, cuộc trò chuyện không thể bị ẩn hoặc xóa và có thể được người khác lưu trữ hoặc chia sẻ. Chúng tôi khuyên bạn nên cân nhắc cẩn thận và tránh chia sẻ thông tin nhạy cảm hoặc riêng tư trên nền tảng này."
},
"newFolder": "Thư mục mới",
"cloneChat": "Nhân đôi cuộc trò chuyện",
"cloned": "Đã nhân bản",
"enterToSubmit": "Enter để nộp",
"submitPlaceholder": "Nhập tin nhắn hoặc ấn [/] để tìm các lời nhắc..."
}
================================================
FILE: public/locales/vi-VN/model.json
================================================
{
"configuration": "Cấu hình",
"model": "Mô hình",
"token": {
"label": "Mã thông báo tối đa",
"description": "Số lượng mã thông báo tối đa cần tạo khi hoàn thành trò chuyện. Tổng chiều dài của mã thông báo đầu vào và mã thông báo được tạo bị giới hạn bởi độ dài ngữ cảnh của mô hình."
},
"default": "Mặc định",
"temperature": {
"label": "Nhiệt độ",
"description": "Nên sử dụng nhiệt độ lấy mẫu nào, trong khoảng từ 0 đến 2. Các giá trị cao hơn như 0,8 sẽ làm cho đầu ra ngẫu nhiên hơn, trong khi các giá trị thấp hơn như 0,2 sẽ làm cho đầu ra tập trung và mang tính quyết định hơn. Chúng tôi thường khuyên bạn nên thay đổi phần này hoặc Top-p nhưng không nên thay đổi cả hai. (Mặc định: 1)"
},
"presencePenalty": {
"label": "Hình phạt hiện diện",
"description": "Số từ -2,0 đến 2,0. Các giá trị dương sẽ phạt các mã thông báo mới dựa trên việc chúng có xuất hiện trong văn bản cho đến nay hay không, làm tăng khả năng mô hình nói về các chủ đề mới. (Mặc định: 0)"
},
"topP": {
"label": "Top-p",
"description": "Số từ 0 đến 1. Một cách thay thế cho việc lấy mẫu bằng nhiệt độ, được gọi là lấy mẫu hạt nhân, trong đó mô hình xem xét kết quả của các mã thông báo có khối lượng xác suất p cao nhất. Vì vậy, 0,1 có nghĩa là chỉ các Mã thông báo có khối lượng xác suất 10% cao nhất mới được xem xét. Chúng tôi thường khuyên bạn nên thay đổi điều này hoặc nhiệt độ nhưng không nên thay đổi cả hai. (Mặc định: 1)"
},
"frequencyPenalty": {
"label": "Hình phạt tần suất",
"description": "Số từ -2,0 đến 2,0. Các giá trị dương sẽ xử phạt các mã thông báo mới dựa trên tần suất hiện có của chúng trong văn bản cho đến nay, làm giảm khả năng mô hình lặp lại nguyên văn cùng một dòng. (Mặc định: 0)"
},
"defaultChatConfig": "Cấu hình trò chuyện mặc định",
"defaultSystemMessage": "Thông báo hệ thống mặc định",
"resetToDefault": "Đặt lại về mặc định"
}
================================================
FILE: public/locales/zh-CN/about.json
================================================
{
"description": "Better ChatGPT 是一个神奇的开源 Web 应用,允许您免费使用 OpenAI 的 ChatGPT API 进行对话!",
"sourceCode": "在 GitHub 上查看<0>源代码</0>并给它一个⭐️!",
"initiative": {
"description": "看看《<0>开放 ChatGPT 倡议</0>》吧!",
"link": "https://medium.com/@ayaka_90553/%E5%BC%80%E6%94%BE-chatgpt-%E5%80%A1%E8%AE%AE-eaac01243dae"
},
"support": {
"title": "支持",
"paragraph1": "在 Better ChatGPT,我们致力于为您提供实用和惊人的功能。就像任何项目一样,您的支持和激励将对我们在保持前进方面起到至关重要的作用!",
"paragraph2": "如果您喜欢使用我们的应用程序,我们恳请您给这个<0>项目</0>一个⭐️。您的认可对我们意义重大,鼓励我们更加努力,以提供最佳的体验。",
"paragraph3": "如果您想支持我们的团队,请考虑通过以下方法之一赞助我们。每一份贡献,无论多小,都有助于我们维护和改善我们的服务。",
"paragraph4": "感谢您成为我们社区的一员,我们期待着在未来为您提供更好的服务。",
"alipay": "支付宝",
"wechatPay": "微信"
},
"discordServer": {
"title": "Discord 服务器",
"paragraph1": "我们邀请您加入我们的 Discord 社区!我们的 Discord 服务器是一个风水宝地,可以交流 ChatGPT 的想法和技巧,并提交 Better ChatGPT 的功能请求。您将有机会与 Better ChatGPT 的开发人员以及其他分享您热情的人工智能爱好者互动。",
"paragraph2": "要加入我们的服务器,只需单击以下链接:<0>https://discord.gg/g3Qnwy4V6A</0>。我们迫不及待地想见到您!"
},
"privacyStatement": {
"title": "隐私声明",
"paragraph1": "我们非常重视您的隐私,并致力于保护用户的隐私。我们不会以任何形式收集或存储您输入或从 OpenAI 服务器接收的任何文本。我们的源代码可以供您检查,以验证此声明。",
"paragraph2": "我们高度优先考虑您的 API 密钥的安全,并非常小心地处理它。如果您使用自己的 API 密钥,您的密钥将专门存储在您的浏览器中,并且永远不会与任何第三方实体共享。它仅用于访问 OpenAI API 的预期用途,而不会用于任何其他未经授权的用途。"
}
}
================================================
FILE: public/locales/zh-CN/api.json
================================================
{
"securityMessage": "我们高度优先考虑您的 API 密钥的安全,并非常小心地处理它。您的密钥将专门存储在您的浏览器中,并且永远不会与任何第三方实体共享。它仅用于访问 OpenAI API 的预期用途,而不是用于任何其他未经授权的用途。",
"apiEndpoint": {
"inputLabel": "API 端点",
"description": "选用非官方 API 端点时,它会作为代理运作。代理作用是在您的设备和目标服务器(在本例中为 OpenAI API)之间充当中介。通过这样做,您能够在被限制的地区访问 OpenAI API。",
"warn": "此外,如果您提供自定义 API 端点并授予免费访问 OpenAI API 的权限,您可以通过留空 API 密钥字段来使用 ChatGPT,而无需提供API密钥。但是,使用第三方 API 端点时务必谨慎,因为不可信的端点可能会在对话中记录您的个人信息。使用之前请始终验证 API 端点的可靠性以保护您的隐私和安全。"
},
"apiKey": {
"howTo": "在<0>此处</0>获取您的个人 API 密钥。",
"inputLabel": "API 密钥"
},
"customEndpoint": "使用自定义 API 端点",
"advancedConfig": "在<0>此处</0>查看进阶 API 设置",
"noApiKeyWarning": "缺少 API key,请检查 API 设置。"
}
================================================
FILE: public/locales/zh-CN/drive.json
================================================
{
"name": "Google 同步",
"tagline": "轻松地将您的聊天和设置与 Google Drive 同步。",
"button": {
"sync": "同步您的聊天",
"stop": "停止同步",
"create": "创建新文件",
"confirm": "确认选择"
},
"notice": "注意:每次访问或每小时您都需要重新登录。为了避免您的云数据被覆盖,不要在多于一个设备上同时使用 Better ChatGPT。",
"privacy": "您的隐私对我们很重要。为了确保安全,Better ChatGPT 只具有非敏感访问权,这意味着它只能创建、查看和管理其自己的文件和文件夹。",
"toast": {
"sync": "同步成功!",
"stop": "已停止同步"
}
}
================================================
FILE: public/locales/zh-CN/main.json
================================================
{
"save": "保存",
"generate": "生成",
"cancel": "取消",
"confirm": "确认",
"warning": "警告",
"clearMessageWarning": "请注意,通过提交此消息,所有后续消息都将被删除!",
"clearConversationWarning": "请注意,确认此操作将删除所有消息!",
"clearConversation": "清除会话",
"import": "导入",
"export": "导出",
"author": "由 Jing Hua 制作",
"about": "关于和赞助",
"api": "API",
"personal": "个人",
"free": "免费",
"downloadChat": "下载聊天记录",
"user": "用户",
"assistant": "助手",
"system": "系统",
"newChat": "新聊天",
"lightMode": "亮色模式",
"darkMode": "黑暗模式",
"setting": "设置",
"image": "图片",
"autoTitle": "自动生成标题",
"advancedMode": "进阶模式",
"inlineLatex": "行内 Latex",
"prompt": "提示词",
"promptLibrary": "提示词资料库",
"name": "名称",
"search": "搜索",
"total": "合计",
"resetCost": "重置费用",
"countTotalTokens": "计算总 Token 数",
"morePrompts": "更多提示词请点击:",
"clearPrompts": "清除提示词",
"postOnShareGPT": {
"title": "发布至 ShareGPT",
"warning": "请注意,把您的对话发布到 ShareGPT 后,任何人都可以公开访问和查看。发布后,对话不能被隐藏或删除,且可能被其他人存档或分享。建议您慎重考虑,在这个平台上避免分享敏感或私密信息。"
},
"newFolder": "新文件夹",
"cloneChat": "创建聊天副本",
"cloned": "已创建副本",
"enterToSubmit": "按回车键提交",
"submitPlaceholder": "输入消息或点击 [/] 以使用提示词…"
}
================================================
FILE: public/locales/zh-CN/model.json
================================================
{
"configuration": "配置",
"model": "模型",
"token": {
"label": "最大 Token",
"description": "助手生成一条信息可以包含的最大 token 数。最大 token 数也受到模型的总长度限制,上文的 token 数和生成的 token 数之和不能超过模型的 token 总数(例如 gpt-3.5-turbo 的 token 总数是 4096)。"
},
"default": "默认",
"temperature": {
"label": "采样温度",
"description": "使用何种采样温度,值在 0 到 2 之间。较高的数值如 0.8 会使输出更加随机,而较低的数值如 0.2 会使输出更加集中和确定。我们通常建议修改此参数或 Top-p,但不要同时修改两者。(默认: 1)"
},
"presencePenalty": {
"label": "存在惩罚",
"description": "数值在 -2.0 到 2.0 之间。正值会根据新 token 是否已经出现在文本中来惩罚它们,增加模型谈论新话题的可能性。 (默认: 0)"
},
"topP": {
"label": "Top-p",
"description": "数值在 0 到 1 之间。采用核采样(nucleus sampling)的一种采样温度的替代方法,模型仅考虑前 Top-p 概率质量的 token。因此,0.1 表示仅考虑前 10% 概率质量的 token。我们通常建议修改此参数或采样温度,但不要同时修改两者。(默认: 1)"
},
"frequencyPenalty": {
"label": "频率惩罚",
"description": "数值在 -2.0 到 2.0 之间。正值会根据新 token 在文本中的现有频率来惩罚它们,降低模型直接重复相同语句的可能性。(默认: 0)"
},
"defaultChatConfig": "默认聊天配置",
"defaultSystemMessage": "默认系统消息",
"resetToDefault": "重置为默认值"
}
================================================
FILE: public/locales/zh-HK/about.json
================================================
{
"description": "Better ChatGPT 係一款好犀利嘅開源 Web App,佢使用 OpenAI 嘅 ChatGPT API,令到你可以免費同 ChatGPT 傾偈!",
"sourceCode": "喺 GitHub 上檢視<0>原始碼</0>同埋畀個 ⭐️ 我哋!",
"initiative": {
"description": "睇下《<0>開放 ChatGPT 倡議</0>》啦!",
"link": "https://medium.com/@ayaka_45434/the-open-chatgpt-initiative-e76b0b62a3ae"
},
"support": {
"title": "支持",
"paragraph1": "Better ChatGPT 致力於提供實用同驚人嘅特性,你嘅支持同激勵將鼓勵我哋繼續前行!",
"paragraph2": "如果你中意呢款 App,我哋請你喺 <0>GitHub</0> 上面畀個 ⭐️。你嘅認可對我哋非同小可,鼓勵我哋更加努力,不斷提供最佳嘅使用體驗。",
"paragraph3": "如果你想支持我哋嘅團隊,你可以透過以下方式贊助我哋。每一分貢獻,無論幾細,都幫助我哋維護同埋改善服務。",
"paragraph4": "多謝你成為我哋社群嘅一員,我哋期待喺未來提供更好嘅服務畀你。",
"alipay": "支付寶",
"wechatPay": "微信"
},
"discordServer": {
"title": "Discord 伺服器",
"paragraph1": "歡迎加入我哋嘅 Discord 社羣!呢個 Discord 伺服器係一個風水寶地,可以交流 ChatGPT 嘅靈感同埋技巧,並提交 Better ChatGPT 嘅功能建議。你可以同 Better ChatGPT 嘅開發者同埋其他分享你熱情嘅人工智能愛好者傾偈。",
"paragraph2": "要加入我哋嘅伺服器,只需要撳呢條 link:<0>https://discord.gg/g3Qnwy4V6A</0>,我哋好想見到你!"
},
"privacyStatement": {
"title": "私隱聲明",
"paragraph1": "我哋非常重視你嘅私隱,並致力於保護用家嘅私隱。我哋唔會以任何形式收集或儲存你鍵入或由 OpenAI 伺服器接收嘅任何文字。我哋嘅原始碼可以供你檢查,以驗證呢項聲明。",
"paragraph2": "我哋非常重視你嘅 API key 安全,非常小心噉處理佢。如果你用自己嘅 API key,你嘅 key 將專門儲存喺你嘅瀏覽器入面,並且永遠唔會共享畀任何第三方實體。佢僅用於訪問 OpenAI API 呢項預期用途,唔會用於任何其他未經授權嘅用途。"
}
}
================================================
FILE: public/locales/zh-HK/api.json
================================================
{
"securityMessage": "我哋將你嘅 API key 嘅安全擺喺首位,非常小心噉處理佢。你嘅 key 專門儲存喺你嘅瀏覽器入面,並且唔會共享畀任何第三方實體。佢僅用於存取 OpenAI API 呢項指定用途,唔會用於任何其他未經授權嘅用途。",
"apiEndpoint": {
"inputLabel": "API 端點",
"description": "如果你選擇非官方嘅 API 端點,佢充當代理。代理係你嘅設備同目標伺服器(呢度即係 OpenAI API)之間嘅中介,噉你就可以喺用唔到 OpenAI API 嘅地區使用。",
"warn": "另外,如果你提供咗一個允許免費存取 OpenAI API 嘅自訂嘅 API 端點,噉你唔使填寫 API key 就可以用到 ChatGPT。不過,用第三方 API 端點嗰陣必須謹慎,因為唔可信嘅 API 端點可能會記低你喺傾偈入面嘅個人資料。用第三方 API 端點之前要驗證佢是否可信,噉樣可以保護你嘅私隱同安全。"
},
"apiKey": {
"howTo": "喺<0>呢度</0>取得你嘅個人 API key。",
"inputLabel": "API key"
},
"customEndpoint": "使用自訂 API 端點",
"advancedConfig": "喺<0>呢度</0>檢視進階 API 設定",
"noApiKeyWarning": "冇填寫 API key,請 check 返個 API 設定。"
}
================================================
FILE: public/locales/zh-HK/drive.json
================================================
{
"name": "Google 同步",
"tagline": "輕鬆將你嘅傾偈同設定同步至 Google Drive。",
"button": {
"sync": "同步你嘅傾偈",
"stop": "停止同步",
"create": "建立新檔案",
"confirm": "確認選擇"
},
"notice": "注意:你需要喺每次存取時或每個鐘重新登入。為避免雲端資料被覆蓋,請勿同一時間喺多個裝置上使用 Better ChatGPT。",
"privacy": "你嘅私隱對我哋非常重要。為確保你嘅私隱,Better ChatGPT 淨係具有非敏感存取權限,即係佢淨係可以建立、檢視同管理佢自己嘅檔案同資料夾。",
"toast": {
"sync": "同步成功!",
"stop": "同步已停止"
}
}
================================================
FILE: public/locales/zh-HK/main.json
================================================
{
"save": "儲存",
"generate": "生成",
"cancel": "取消",
"confirm": "確認",
"warning": "警告",
"clearMessageWarning": "請注意,送出呢條訊息之後,所有後續訊息都將被刪除!",
"clearConversationWarning": "請注意,呢個操作會刪晒所有訊息!",
"clearConversation": "清空傾偈",
"import": "匯入",
"export": "匯出",
"author": "由 Jing Hua 製作",
"about": "關於同贊助",
"api": "API",
"personal": "個人",
"free": "免費",
"downloadChat": "儲存傾偈記錄",
"user": "用户",
"assistant": "助理",
"system": "系統",
"newChat": "新傾偈",
"lightMode": "亮色模式",
"darkMode": "黑暗模式",
"setting": "設定",
"image": "圖片",
"autoTitle": "自動產生標題",
"advancedMode": "進階模式",
"inlineLatex": "行內 Latex",
"prompt": "Prompt",
"promptLibrary": "Prompt 資料庫",
"name": "名",
"search": "檢索",
"total": "合計",
"resetCost": "重置費用",
"countTotalTokens": "計算總 Token 數",
"morePrompts": "如果你想揾更多 prompt,撳呢度:",
"clearPrompts": "清空 prompts",
"postOnShareGPT": {
"title": "Po 上 ShareGPT",
"warning": "請注意,你將呢個傾偈 po 上 ShareGPT 之後,佢會係公開嘅,所有人都可以見到你寫嘅嘢。Po 咗之後,呢個傾偈將冇得被隱藏或刪除,亦都可能畀人存檔同分享。我哋建議你仔細諗下,唔好喺嗰度分享敏感或私人資料。"
},
"newFolder": "新資料夾",
"cloneChat": "建立傾偈副本",
"cloned": "建立成功",
"enterToSubmit": "撳 Enter 鍵送出",
"submitPlaceholder": "輸入訊息或撳 [/] 以使用提示詞…"
}
================================================
FILE: public/locales/zh-HK/model.json
================================================
{
"configuration": "設定",
"model": "模型",
"token": {
"label": "最大 Token",
"description": "控制助理嘅一條 msg 最多可以 gen 幾多 token。最大 token 數仲受到模型總長度嘅限制,上文嘅 token 數同生成嘅 token 數加埋一齊唔可以超過模型嘅 token 總數(譬如 gpt-3.5-turbo 嘅 token 總數係 4096)。"
},
"default": "預設",
"temperature": {
"label": "取樣温度",
"description": "係一個 0 到 2 之間嘅數值。較高嘅數值如 0.8 會令到輸出更加隨機,而較低嘅數值如 0.2 會令到輸出更加集中同確定。通常建議修改呢個參數或者 Top-p,但係唔好同時修改兩者。(預設: 1)"
},
"presencePenalty": {
"label": "存在懲罰",
"description": "係一個 -2.0 到 2.0 之間嘅數值。正嘅數值表示,如果某個 token 已經出現喺文字當中,輸出嗰陣就會懲罰佢,令到佢被揀中嘅機率降低,即係可以增加模型講新話題嘅機會。 (預設: 0)"
},
"topP": {
"label": "Top-p",
"description": "係一個 0 到 1 之間嘅數值。喺核心取樣(根據温度取樣嘅一種替代方法)入面,取樣嗰陣會由機率最高嗰啲 token 當中揀,0.1 表示僅考慮機率求和達到 10% 嘅 token。通常建議修改呢個參數或取樣温度,但唔好同時修改兩者。(預設: 1)"
},
"frequencyPenalty": {
"label": "頻率懲罰",
"description": "係一個 -2.0 到 2.0 之間嘅數值。正嘅數值表示,如果 token 喺之前嘅文字中出現頻率越高,輸出嗰陣就會越大力噉懲罰佢,令到佢被揀中嘅機率降低,即係可以降低模型重複同一句説話嘅機會。(預設: 0)"
},
"defaultChatConfig": "預設傾偈設定",
"defaultSystemMessage": "預設系統消息",
"resetToDefault": "重置為預設值"
}
================================================
FILE: public/locales/zh-TW/about.json
================================================
{
"description": "Better ChatGPT 是一個神奇的開源 Web 應用程式,允許您免費使用 OpenAI 的 ChatGPT API 進行對話!",
"sourceCode": "在 GitHub 上檢視<0>原始碼</0>並給它一個⭐️!",
"initiative": {
"description": "看看《<0>開放 ChatGPT 倡議</0>》吧!",
"link": "https://medium.com/@ayaka_90553/%E5%BC%80%E6%94%BE-chatgpt-%E5%80%A1%E8%AE%AE-eaac01243dae"
},
"support": {
"title": "支持",
"paragraph1": "在 Better ChatGPT,我們致力於為您提供實用和驚人的功能。就像任何專案一樣,您的支持和激勵將對我們在保持前進方面起到至關重要的作用!",
"paragraph2": "如果您喜歡使用我們的應用程式,我們懇請您給這個<0>專案</0>一個⭐️。您的認可對我們意義重大,鼓勵我們更加努力,以提供最佳的體驗。",
"paragraph3": "如果您想支持我們的團隊,請考慮透過以下方法之一讚助我們。每一份貢獻,無論多小,都有助於我們維護和改善我們的服務。",
"paragraph4": "感謝您成為我們社群的一員,我們期待在未來為您提供更好的服務。",
"alipay": "支付寶",
"wechatPay": "微信"
},
"discordServer": {
"title": "Discord 伺服器",
"paragraph1": "我們邀請您加入我們的 Discord 社群!我們的 Discord 伺服器是一個風水寶地,可以交流 ChatGPT 的想法和技巧,並提交 Better ChatGPT 的功能請求。您將有機會與 Better ChatGPT 的開發人員以及其他分享您熱情的人工智慧愛好者互動。",
"paragraph2": "要加入我們的伺服器,只需點選以下連結:<0>https://discord.gg/g3Qnwy4V6A</0>。我們迫不及待地想見到您!"
},
"privacyStatement": {
"title": "隱私宣告",
"paragraph1": "我們非常重視您的隱私,並致力於保護使用者的隱私。我們不會以任何形式收集或儲存您輸入或從 OpenAI 伺服器接收的任何文字。我們的原始碼可以供您檢查,以驗證此宣告。",
"paragraph2": "我們非常重視您的 API 金鑰安全,並非常小心地處理它。如果您使用自己的 API 金鑰,您的金鑰將專門儲存在您的瀏覽器中,並且永遠不會與任何第三方實體共享。它僅用於存取 OpenAI API 的預期用途,而不會用於任何其他未經授權的用途。"
}
}
================================================
FILE: public/locales/zh-TW/api.json
================================================
{
"securityMessage": "我們高度重視您的 API 金鑰安全,並非常小心地處理它。您的金鑰專門儲存在您的瀏覽器中,並且不會與任何第三方實體共享。它僅用於存取 OpenAI API 的指定用途,不會用於任何其他未經授權的用途。",
"apiEndpoint": {
"inputLabel": "API 端點",
"description": "當您選擇非官方 API 端點時,它將作為代理。代理的作用是在您的裝置與目的伺服器(本例中為 OpenAI API)之間作為中介。透過這個方式,它讓您能夠在其他可能受限的地區存取 OpenAI API。",
"warn": "此外,如果您提供了一個允許免費存取 OpenAI API 的自訂 API 端點,您只需將 API 金鑰欄位留空即可使用 ChatGPT,無需提供 API 金鑰。不過,在使用第三方 API 端點時必須謹慎,因為不可靠的端點可能會在對話中記錄您的個人資訊。在使用 API 端點前,請始終確認其可靠性,以保護您的隱私和安全。"
},
"apiKey": {
"howTo": "在<0>此處</0>取得您的個人 API 金鑰。",
"inputLabel": "API 金鑰"
},
"customEndpoint": "使用自訂 API 端點",
"advancedConfig": "在<0>此處</0>檢視進階 API 設定",
"noApiKeyWarning": "未提供 API 金鑰!請檢查 API 設定。"
}
================================================
FILE: public/locales/zh-TW/drive.json
================================================
{
"name": "Google 同步",
"tagline": "輕鬆地將您的聊天和設定與 Google Drive 同步。",
"button": {
"sync": "同步您的聊天",
"stop": "停止同步",
"create": "建立新檔案",
"confirm": "確認選擇"
},
"notice": "注意:您需要在每次存取時或每個小時重新登入。為避免雲端資料被覆蓋,請勿在同一時間在多個裝置上使用 Better ChatGPT。",
"privacy": "您的隱私對我們非常重要,為確保您的隱私,Better ChatGPT 只具有非敏感存取權限,即只能建立、檢視和管理其自己的檔案和資料夾。",
"toast": {
"sync": "同步成功!",
"stop": "同步已停止"
}
}
================================================
FILE: public/locales/zh-TW/main.json
================================================
{
"save": "儲存",
"generate": "生成",
"cancel": "取消",
"confirm": "確認",
"warning": "警告",
"clearMessageWarning": "請注意,透過送出此訊息,所有後續訊息都將被刪除!",
"clearConversationWarning": "請注意,確認此操作將刪除所有訊息!",
"clearConversation": "清除對話",
"import": "匯入",
"export": "匯出",
"author": "由 Jing Hua 製作",
"about": "關於和贊助",
"api": "API",
"personal": "個人",
"free": "免費",
"downloadChat": "下載聊天記錄",
"user": "使用者",
"assistant": "助理",
"system": "系統",
"newChat": "新聊天",
"lightMode": "亮色模式",
"darkMode": "黑暗模式",
"setting": "設定",
"image": "圖片",
"autoTitle": "自動產生標題",
"advancedMode": "進階模式",
"inlineLatex": "行內 Latex",
"prompt": "提示詞",
"promptLibrary": "提示詞資料庫",
"name": "名稱",
"search": "搜尋",
"total": "合計",
"resetCost": "重置費用",
"countTotalTokens": "計算總 Token 數",
"morePrompts": "更多提示詞請點選:",
"clearPrompts": "清除提示詞",
"postOnShareGPT": {
"title": "發佈至 ShareGPT",
"warning": "請注意,將您的對話發佈至 ShareGPT 後,任何人都可以公開存取和檢視。一旦發佈,對話將無法隱藏或刪除,並且可能被他人存檔或分享。我們建議您慎重考慮,並避免在此平臺上分享敏感或私人資訊。"
},
"newFolder": "新資料夾",
"cloneChat": "建立聊天副本",
"cloned": "已建立副本",
"enterToSubmit": "按 Enter 鍵送出",
"submitPlaceholder": "輸入訊息或點選 [/] 以使用提示詞…"
}
================================================
FILE: public/locales/zh-TW/model.json
================================================
{
"configuration": "設定",
"model": "模型",
"token": {
"label": "最大 Token",
"description": "助理生成一條資訊可以包含的最大 token 數。最大 token 數也受到模型的總長度限制,上文的 token 數和生成的 token 數之和不能超過模型的 token 總數(例如 gpt-3.5-turbo 的 token 總數是 4096)。"
},
"default": "預設",
"temperature": {
"label": "取樣溫度",
"description": "使用何種取樣溫度,值在 0 到 2 之間。較高的數值如 0.8 會使輸出更加隨機,而較低的數值如 0.2 會使輸出更加集中和確定。我們通常建議修改此參數或機率質量,但不要同時修改兩者。(預設: 1)"
},
"presencePenalty": {
"label": "存在懲罰",
"description": "數值在 -2.0 到 2.0 之間。正值會根據新 token 是否已經出現在文字中來懲罰它們,增加模型談論新話題的可能性。 (預設: 0)"
},
"topP": {
"label": "Top-p",
"description": "數值在 0 到 1 之間。採用核心取樣(nucleus sampling)的一種取樣溫度的替代方法,模型僅考慮前 Top-p 機率質量的 token。因此,0.1 表示僅考慮佔前 10% 機率質量的 token。我們通常建議修改此參數或取樣溫度,但不要同時修改兩者。(預設: 1)"
},
"frequencyPenalty": {
"label": "頻率懲罰",
"description": "數值在 -2.0 到 2.0 之間。正值會根據新 token 在文字中的現有頻率來懲罰它們,降低模型直接重複相同語句的可能性。(預設: 0)"
},
"defaultChatConfig": "預設聊天設定",
"defaultSystemMessage": "預設系統訊息",
"resetToDefault": "重設為預設值"
}
================================================
FILE: src/App.tsx
================================================
import React, { useEffect } from 'react';
import useStore from '@store/store';
import i18n from './i18n';
import Chat from '@components/Chat';
import Menu from '@components/Menu';
import useInitialiseNewChat from '@hooks/useInitialiseNewChat';
import { ChatInterface } from '@type/chat';
import { Theme } from '@type/theme';
import ApiPopup from '@components/ApiPopup';
import Toast from '@components/Toast';
function App() {
const initialiseNewChat = useInitialiseNewChat();
const setChats = useStore((state) => state.setChats);
const setTheme = useStore((state) => state.setTheme);
const setApiKey = useStore((state) => state.setApiKey);
const setCurrentChatIndex = useStore((state) => state.setCurrentChatIndex);
useEffect(() => {
document.documentElement.lang = i18n.language;
i18n.on('languageChanged', (lng) => {
document.documentElement.lang = lng;
});
}, []);
useEffect(() => {
// legacy local storage
const oldChats = localStorage.getItem('chats');
const apiKey = localStorage.getItem('apiKey');
const theme = localStorage.getItem('theme');
if (apiKey) {
// legacy local storage
setApiKey(apiKey);
localStorage.removeItem('apiKey');
}
if (theme) {
// legacy local storage
setTheme(theme as Theme);
localStorage.removeItem('theme');
}
if (oldChats) {
// legacy local storage
try {
const chats: ChatInterface[] = JSON.parse(oldChats);
if (chats.length > 0) {
setChats(chats);
setCurrentChatIndex(0);
} else {
initialiseNewChat();
}
} catch (e: unknown) {
console.log(e);
initialiseNewChat();
}
localStorage.removeItem('chats');
} else {
// existing local storage
const chats = useStore.getState().chats;
const currentChatIndex = useStore.getState().currentChatIndex;
if (!chats || chats.length === 0) {
initialiseNewChat();
}
if (
chats &&
!(currentChatIndex >= 0 && currentChatIndex < chats.length)
) {
setCurrentChatIndex(0);
}
}
}, []);
return (
<div className='overflow-hidden w-full h-full relative'>
<Menu />
<Chat />
<ApiPopup />
<Toast />
</div>
);
}
export default App;
================================================
FILE: src/Roboto.css
================================================
/* Roboto Thin */
@font-face {
font-family: 'Roboto';
src: local('Roboto Thin'),
url('./fonts/Roboto-Thin.woff2') format('woff2'),
url('./fonts/Roboto-Thin.ttf') format('truetype');
font-weight: 100;
font-style: normal;
}
/* Roboto Thin Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Thin Italic'),
url('./fonts/Roboto-ThinItalic.woff2') format('woff2'),
url('./fonts/Roboto-ThinItalic.ttf') format('truetype');
font-weight: 100;
font-style: italic;
}
/* Roboto Light */
@font-face {
font-family: 'Roboto';
src: local('Roboto Light'),
url('./fonts/Roboto-Light.woff2') format('woff2'),
url('./fonts/Roboto-Light.ttf') format('truetype');
font-weight: 300;
font-style: normal;
}
/* Roboto Light Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Light Italic'),
url('./fonts/Roboto-LightItalic.woff2') format('woff2'),
url('./fonts/Roboto-LightItalic.ttf') format('truetype');
font-weight: 300;
font-style: italic;
}
/* Roboto Regular */
@font-face {
font-family: 'Roboto';
src: local('Roboto'),
url('./fonts/Roboto-Regular.woff2') format('woff2'),
url('./fonts/Roboto-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
/* Roboto Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Italic'),
url('./fonts/Roboto-Italic.woff2') format('woff2'),
url('./fonts/Roboto-Italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
/* Roboto Medium */
@font-face {
font-family: 'Roboto';
src: local('Roboto Medium'),
url('./fonts/Roboto-Medium.woff2') format('woff2'),
url('./fonts/Roboto-Medium.ttf') format('truetype');
font-weight: 500;
font-style: normal;
}
/* Roboto Medium Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Medium Italic'),
url('./fonts/Roboto-MediumItalic.woff2') format('woff2'),
url('./fonts/Roboto-MediumItalic.ttf') format('truetype');
font-weight: 500;
font-style: italic;
}
/* Roboto Bold */
@font-face {
font-family: 'Roboto';
src: local('Roboto Bold'),
url('./fonts/Roboto-Bold.woff2') format('woff2'),
url('./fonts/Roboto-Bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
/* Roboto Bold Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Bold Italic'),
url('./fonts/Roboto-BoldItalic.woff2') format('woff2'),
url('./fonts/Roboto-BoldItalic.ttf') format('truetype');
font-weight: 700;
font-style: italic;
}
/* Roboto Black */
@font-face {
font-family: 'Roboto';
src: local('Roboto Black'),
url('./fonts/Roboto-Black.woff2') format('woff2'),
url('./fonts/Roboto-Black.ttf') format('truetype');
font-weight: 900;
font-style: normal;
}
/* Roboto Black Italic */
@font-face {
font-family: 'Roboto';
src: local('Roboto Black Italic'),
url('./fonts/Roboto-BlackItalic.woff2') format('woff2'),
url('./fonts/Roboto-BlackItalic.ttf') format('truetype');
font-weight: 900;
font-style: italic;
}
================================================
FILE: src/api/api.ts
================================================
import { ShareGPTSubmitBodyInterface } from '@type/api';
import { ConfigInterface, MessageInterface, ModelOptions } from '@type/chat';
import { isAzureEndpoint } from '@utils/api';
export const getChatCompletion = async (
endpoint: string,
messages: MessageInterface[],
config: ConfigInterface,
apiKey?: string,
customHeaders?: Record<string, string>
) => {
const headers: HeadersInit = {
'Content-Type': 'application/json',
...customHeaders,
};
if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
if (isAzureEndpoint(endpoint) && apiKey) {
headers['api-key'] = apiKey;
const modelmapping: Partial<Record<ModelOptions, string>> = {
'gpt-3.5-turbo': 'gpt-35-turbo',
'gpt-3.5-turbo-16k': 'gpt-35-turbo-16k',
'gpt-3.5-turbo-1106': 'gpt-35-turbo-1106',
'gpt-3.5-turbo-0125': 'gpt-35-turbo-0125',
};
const model = modelmapping[config.model] || config.model;
// set api version to 2023-07-01-preview for gpt-4 and gpt-4-32k, otherwise use 2023-03-15-preview
const apiVersion =
model === 'gpt-4' || model === 'gpt-4-32k'
? '2023-07-01-preview'
: '2023-03-15-preview';
const path = `openai/deployments/${model}/chat/completions?api-version=${apiVersion}`;
if (!endpoint.endsWith(path)) {
if (!endpoint.endsWith('/')) {
endpoint += '/';
}
endpoint += path;
}
}
const response = await fetch(endpoint, {
method: 'POST',
headers,
body: JSON.stringify({
messages,
...config,
max_tokens: undefined,
}),
});
if (!response.ok) throw new Error(await response.text());
const data = await response.json();
return data;
};
export const getChatCompletionStream = async (
endpoint: string,
messages: MessageInterface[],
config: ConfigInterface,
apiKey?: string,
customHeaders?: Record<string, string>
) => {
const headers: HeadersInit = {
'Content-Type': 'application/json',
...customHeaders,
};
if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
if (isAzureEndpoint(endpoint) && apiKey) {
headers['api-key'] = apiKey;
const modelmapping: Partial<Record<ModelOptions, string>> = {
'gpt-3.5-turbo': 'gpt-35-turbo',
'gpt-3.5-turbo-16k': 'gpt-35-turbo-16k',
};
const model = modelmapping[config.model] || config.model;
// set api version to 2023-07-01-preview for gpt-4 and gpt-4-32k, otherwise use 2023-03-15-preview
const apiVersion =
model === 'gpt-4' || model === 'gpt-4-32k'
? '2023-07-01-preview'
: '2023-03-15-preview';
const path = `openai/deployments/${model}/chat/completions?api-version=${apiVersion}`;
if (!endpoint.endsWith(path)) {
if (!endpoint.endsWith('/')) {
endpoint += '/';
}
endpoint += path;
}
}
const response = await fetch(endpoint, {
method: 'POST',
headers,
body: JSON.stringify({
messages,
...config,
max_tokens: undefined,
stream: true,
}),
});
if (response.status === 404 || response.status === 405) {
const text = await response.text();
if (text.includes('model_not_found')) {
throw new Error(
text +
'\nMessage from Better ChatGPT:\nPlease ensure that you have access to the GPT-4 API!'
);
} else {
throw new Error(
'Message from Better ChatGPT:\nInvalid API endpoint! We recommend you to check your free API endpoint.'
);
}
}
if (response.status === 429 || !response.ok) {
const text = await response.text();
let error = text;
if (text.includes('insufficient_quota')) {
error +=
'\nMessage from Better ChatGPT:\nWe recommend changing your API endpoint or API key';
} else if (response.status === 429) {
error += '\nRate limited!';
}
throw new Error(error);
}
const stream = response.body;
return stream;
};
export const submitShareGPT = async (body: ShareGPTSubmitBodyInterface) => {
const request = await fetch('https://sharegpt.com/api/conversations', {
body: JSON.stringify(body),
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
});
const response = await request.json();
const { id } = response;
const url = `https://shareg.pt/${id}`;
window.open(url, '_blank');
};
================================================
FILE: src/api/google-api.ts
================================================
import { debounce } from 'lodash';
import { StorageValue } from 'zustand/middleware';
import useStore from '@store/store';
import useCloudAuthStore from '@store/cloud-auth-store';
import {
GoogleTokenInfo,
GoogleFileResource,
GoogleFileList,
} from '@type/google-api';
import PersistStorageState from '@type/persist';
import { createMultipartRelatedBody } from './helper';
export const createDriveFile = async (
file: File,
accessToken: string
): Promise<GoogleFileResource> => {
const boundary = 'better_chatgpt';
const metadata = {
name: file.name,
mimeType: file.type,
};
const requestBody = createMultipartRelatedBody(metadata, file, boundary);
const response = await fetch(
'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart',
{
method: 'POST',
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': `multipart/related; boundary=${boundary}`,
'Content-Length': requestBody.size.toString(),
},
body: requestBody,
}
);
if (response.ok) {
const result: GoogleFileResource = await response.json();
return result;
} else {
throw new Error(
`Error uploading file: ${response.status} ${response.statusText}`
);
}
};
export const getDriveFile = async <S>(
fileId: string,
accessToken: string
): Promise<StorageValue<S>> => {
const response = await fetch(
`https://content.googleapis.com/drive/v3/files/${fileId}?alt=media`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${accessToken}`,
},
}
);
const result: StorageValue<S> = await response.json();
return result;
};
export const getDriveFileTyped = async (
fileId: string,
accessToken: string
): Promise<StorageValue<PersistStorageState>> => {
return await getDriveFile(fileId, accessToken);
};
export const listDriveFiles = async (
accessToken: string
): Promise<GoogleFileList> => {
const response = await fetch(
'https://www.googleapis.com/drive/v3/files?orderBy=createdTime desc',
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${accessToken}`,
},
}
);
if (!response.ok) {
throw new Error(
`Error listing google drive files: ${response.status} ${response.statusText}`
);
}
const result: GoogleFileList = await response.json();
return result;
};
export const updateDriveFile = async (
file: File,
fileId: string,
accessToken: string
): Promise<GoogleFileResource> => {
const response = await fetch(
`https://www.googleapis.com/upload/drive/v3/files/${fileId}`,
{
method: 'PATCH',
headers: {
Authorization: `Bearer ${accessToken}`,
},
body: file,
}
);
if (response.ok) {
const result: GoogleFileResource = await response.json();
return result;
} else {
throw new Error(
`Error uploading file: ${response.status} ${response.statusText}`
);
}
};
export const updateDriveFileName = async (
fileName: string,
fileId: string,
accessToken: string
) => {
const response = await fetch(
`https://www.googleapis.com/drive/v3/files/${fileId}`,
{
method: 'PATCH',
headers: {
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ name: fileName }),
}
);
if (response.ok) {
const result: GoogleFileResource = await response.json();
return result;
} else {
throw new Error(
`Error updating file name: ${response.status} ${response.statusText}`
);
}
};
export const deleteDriveFile = async (fileId: string, accessToken: string) => {
const response = await fetch(
`https://www.googleapis.com/drive/v3/files/${fileId}`,
{
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${accessToken}`,
},
}
);
if (response.ok) {
return true;
} else {
throw new Error(
`Error deleting file name: ${response.status} ${response.statusText}`
);
}
};
export const validateGoogleOath2AccessToken = async (accessToken: string) => {
const response = await fetch(
`https://oauth2.googleapis.com/tokeninfo?access_token=${accessToken}`
);
if (!response.ok) return false;
const result: GoogleTokenInfo = await response.json();
return result;
};
export const updateDriveFileDebounced = debounce(
async (file: File, fileId: string, accessToken: string) => {
try {
const result = await updateDriveFile(file, fileId, accessToken);
useCloudAuthStore.getState().setSyncStatus('synced');
return result;
} catch (e: unknown) {
useStore.getState().setToastMessage((e as Error).message);
useStore.getState().setToastShow(true);
useStore.getState().setToastStatus('error');
useCloudAuthStore.getState().setSyncStatus('unauthenticated');
}
},
5000
);
================================================
FILE: src/api/helper.ts
================================================
import { EventSourceData } from '@type/api';
export const parseEventSource = (
data: string
): '[DONE]' | EventSourceData[] => {
const result = data
.split('\n\n')
.filter(Boolean)
.map((chunk) => {
const jsonString = chunk
.split('\n')
.map((line) => line.replace(/^data: /, ''))
.join('');
if (jsonString === '[DONE]') return jsonString;
try {
const json = JSON.parse(jsonString);
return json;
} catch {
return jsonString;
}
});
return result;
};
export const createMultipartRelatedBody = (
metadata: object,
file: File,
boundary: string
): Blob => {
const encoder = new TextEncoder();
const metadataPart = encoder.encode(
`--${boundary}\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n${JSON.stringify(
metadata
)}\r\n`
);
const filePart = encoder.encode(
`--${boundary}\r\nContent-Type: ${file.type}\r\n\r\n`
);
const endBoundary = encoder.encode(`\r\n--${boundary}--`);
return new Blob([metadataPart, filePart, file, endBoundary], {
type: 'multipart/related; boundary=' + boundary,
});
};
================================================
FILE: src/assets/icons/AboutIcon.tsx
================================================
import React from 'react';
const AboutIcon = () => {
return (
<svg
xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 512 512'
className='h-4 w-4'
fill='white'
>
<path d='M256 512A256 256 0 1 0 256 0a
gitextract_eognuhoc/ ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── deploy.yml │ └── publish.yml ├── .gitignore ├── .prettierrc ├── Dockerfile ├── LICENSE ├── README-zh_CN.md ├── README.md ├── docker-compose.yml ├── electron/ │ └── index.cjs ├── index.html ├── package.json ├── postcss.config.cjs ├── public/ │ ├── CNAME │ └── locales/ │ ├── da/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── de/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── en/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── en-US/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── es/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── fr/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── it/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── ja/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── ms/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── nb/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── ro/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── ru/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── sv/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── vi-VN/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── zh-CN/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ ├── zh-HK/ │ │ ├── about.json │ │ ├── api.json │ │ ├── drive.json │ │ ├── main.json │ │ └── model.json │ └── zh-TW/ │ ├── about.json │ ├── api.json │ ├── drive.json │ ├── main.json │ └── model.json ├── src/ │ ├── App.tsx │ ├── Roboto.css │ ├── api/ │ │ ├── api.ts │ │ ├── google-api.ts │ │ └── helper.ts │ ├── assets/ │ │ └── icons/ │ │ ├── AboutIcon.tsx │ │ ├── ArrowBottom.tsx │ │ ├── CalculatorIcon.tsx │ │ ├── ChatIcon.tsx │ │ ├── CloneIcon.tsx │ │ ├── ColorPaletteIcon.tsx │ │ ├── CopyIcon.tsx │ │ ├── CrossIcon.tsx │ │ ├── CrossIcon2.tsx │ │ ├── DeleteIcon.tsx │ │ ├── DownArrow.tsx │ │ ├── DownChevronArrow.tsx │ │ ├── EditIcon.tsx │ │ ├── EditIcon2.tsx │ │ ├── ExportIcon.tsx │ │ ├── FileTextIcon.tsx │ │ ├── FolderIcon.tsx │ │ ├── GoogleIcon.tsx │ │ ├── HeartIcon.tsx │ │ ├── ImageIcon.tsx │ │ ├── JsonIcon.tsx │ │ ├── LinkIcon.tsx │ │ ├── LogoutIcon.tsx │ │ ├── MarkdownIcon.tsx │ │ ├── MenuIcon.tsx │ │ ├── MoneyIcon.tsx │ │ ├── MoonIcon.tsx │ │ ├── NewFolderIcon.tsx │ │ ├── PdfIcon.tsx │ │ ├── PersonIcon.tsx │ │ ├── PlusIcon.tsx │ │ ├── RefreshIcon.tsx │ │ ├── SendIcon.tsx │ │ ├── SettingIcon.tsx │ │ ├── SpinnerIcon.tsx │ │ ├── SunIcon.tsx │ │ └── TickIcon.tsx │ ├── components/ │ │ ├── AboutMenu/ │ │ │ ├── AboutMenu.tsx │ │ │ └── index.ts │ │ ├── ApiMenu/ │ │ │ ├── ApiMenu.tsx │ │ │ └── index.ts │ │ ├── ApiPopup/ │ │ │ ├── ApiPopup.tsx │ │ │ └── index.ts │ │ ├── Chat/ │ │ │ ├── Chat.tsx │ │ │ ├── ChatContent/ │ │ │ │ ├── ChatContent.tsx │ │ │ │ ├── ChatTitle.tsx │ │ │ │ ├── CloneChat.tsx │ │ │ │ ├── DownloadChat.tsx │ │ │ │ ├── Message/ │ │ │ │ │ ├── Avatar.tsx │ │ │ │ │ ├── CodeBlock.tsx │ │ │ │ │ ├── CommandPrompt/ │ │ │ │ │ │ ├── CommandPrompt.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── Message.tsx │ │ │ │ │ ├── MessageContent.tsx │ │ │ │ │ ├── NewMessageButton.tsx │ │ │ │ │ ├── RoleSelector.tsx │ │ │ │ │ ├── View/ │ │ │ │ │ │ ├── Button/ │ │ │ │ │ │ │ ├── BaseButton.tsx │ │ │ │ │ │ │ ├── CopyButton.tsx │ │ │ │ │ │ │ ├── DeleteButton.tsx │ │ │ │ │ │ │ ├── DownButton.tsx │ │ │ │ │ │ │ ├── EditButton.tsx │ │ │ │ │ │ │ ├── MarkdownModeButton.tsx │ │ │ │ │ │ │ ├── RefreshButton.tsx │ │ │ │ │ │ │ └── UpButton.tsx │ │ │ │ │ │ ├── ContentView.tsx │ │ │ │ │ │ └── EditView.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ScrollToBottomButton.tsx │ │ │ │ └── index.ts │ │ │ ├── ChatInput.tsx │ │ │ └── index.ts │ │ ├── ChatConfigMenu/ │ │ │ ├── ChatConfigMenu.tsx │ │ │ └── index.ts │ │ ├── ConfigMenu/ │ │ │ ├── ConfigMenu.tsx │ │ │ └── index.ts │ │ ├── GoogleSync/ │ │ │ ├── GoogleSync.tsx │ │ │ ├── GoogleSyncButton.tsx │ │ │ └── index.ts │ │ ├── ImportExportChat/ │ │ │ ├── ExportChat.tsx │ │ │ ├── ImportChat.tsx │ │ │ ├── ImportChatOpenAI.tsx │ │ │ ├── ImportExportChat.tsx │ │ │ └── index.ts │ │ ├── LanguageSelector/ │ │ │ ├── LanguageSelector.tsx │ │ │ └── index.ts │ │ ├── Menu/ │ │ │ ├── ChatFolder.tsx │ │ │ ├── ChatHistory.tsx │ │ │ ├── ChatHistoryList.tsx │ │ │ ├── ChatSearch.tsx │ │ │ ├── Menu.tsx │ │ │ ├── MenuOptions/ │ │ │ │ ├── Account.tsx │ │ │ │ ├── Api.tsx │ │ │ │ ├── ClearConversation.tsx │ │ │ │ ├── CollapseOptions.tsx │ │ │ │ ├── Logout.tsx │ │ │ │ ├── Me.tsx │ │ │ │ ├── MenuOptions.tsx │ │ │ │ ├── ThemeSwitcher.tsx │ │ │ │ └── index.ts │ │ │ ├── NewChat.tsx │ │ │ ├── NewFolder.tsx │ │ │ └── index.ts │ │ ├── MobileBar/ │ │ │ ├── MobileBar.tsx │ │ │ └── index.ts │ │ ├── PopupModal/ │ │ │ ├── PopupModal.tsx │ │ │ └── index.ts │ │ ├── PromptLibraryMenu/ │ │ │ ├── ExportPrompt.tsx │ │ │ ├── ImportPrompt.tsx │ │ │ ├── PromptLibraryMenu.tsx │ │ │ └── index.ts │ │ ├── SearchBar/ │ │ │ ├── SearchBar.tsx │ │ │ └── index.ts │ │ ├── SettingsMenu/ │ │ │ ├── AdvencedModeToggle.tsx │ │ │ ├── AutoTitleToggle.tsx │ │ │ ├── EnterToSubmitToggle.tsx │ │ │ ├── InlineLatexToggle.tsx │ │ │ ├── SettingsMenu.tsx │ │ │ ├── TotalTokenCost.tsx │ │ │ └── index.ts │ │ ├── ShareGPT/ │ │ │ ├── ShareGPT.tsx │ │ │ └── index.ts │ │ ├── StopGeneratingButton/ │ │ │ └── StopGeneratingButton.tsx │ │ ├── Toast/ │ │ │ ├── Toast.tsx │ │ │ └── index.ts │ │ ├── Toggle/ │ │ │ ├── Toggle.tsx │ │ │ └── index.ts │ │ └── TokenCount/ │ │ ├── TokenCount.tsx │ │ └── index.ts │ ├── constants/ │ │ ├── auth.ts │ │ ├── chat.ts │ │ ├── color.ts │ │ ├── language.ts │ │ └── prompt.ts │ ├── fonts/ │ │ └── LICENSE.txt │ ├── hooks/ │ │ ├── useAddChat.ts │ │ ├── useHideOnOutsideClick.ts │ │ ├── useInitialiseNewChat.ts │ │ ├── useSaveToLocalStorage.ts │ │ └── useSubmit.ts │ ├── i18n.ts │ ├── main.css │ ├── main.tsx │ ├── store/ │ │ ├── auth-slice.ts │ │ ├── chat-slice.ts │ │ ├── cloud-auth-slice.ts │ │ ├── cloud-auth-store.ts │ │ ├── config-slice.ts │ │ ├── input-slice.ts │ │ ├── migrate.ts │ │ ├── prompt-slice.ts │ │ ├── storage/ │ │ │ └── GoogleCloudStorage.ts │ │ ├── store.ts │ │ └── toast-slice.ts │ ├── types/ │ │ ├── api.ts │ │ ├── chat.ts │ │ ├── export.ts │ │ ├── google-api.ts │ │ ├── persist.ts │ │ ├── prompt.ts │ │ └── theme.ts │ ├── utils/ │ │ ├── api.ts │ │ ├── chat.ts │ │ ├── date.ts │ │ ├── downloadFile.ts │ │ ├── google-api.ts │ │ ├── import.ts │ │ ├── messageUtils.ts │ │ └── prompt.ts │ └── vite-env.d.ts ├── tailwind.config.cjs ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts
SYMBOL INDEX (51 symbols across 21 files)
FILE: electron/index.cjs
constant PORT (line 22) | const PORT = isDev ? '5173' : '51735';
constant ICON (line 23) | const ICON = 'icon-rounded.png';
constant ICON_TEMPLATE (line 24) | const ICON_TEMPLATE = 'iconTemplate.png';
function createWindow (line 145) | function createWindow() {
FILE: src/App.tsx
function App (line 14) | function App() {
FILE: src/components/SettingsMenu/TotalTokenCost.tsx
type CostMapping (line 13) | type CostMapping = { model: string; cost: number }[];
FILE: src/components/Toast/Toast.tsx
type ToastStatus (line 4) | type ToastStatus = 'success' | 'error' | 'warning';
FILE: src/store/auth-slice.ts
type AuthSlice (line 4) | interface AuthSlice {
FILE: src/store/chat-slice.ts
type ChatSlice (line 4) | interface ChatSlice {
FILE: src/store/cloud-auth-slice.ts
type CloudAuthSlice (line 4) | interface CloudAuthSlice {
FILE: src/store/cloud-auth-store.ts
type StoreState (line 5) | type StoreState = CloudAuthSlice;
type StoreSlice (line 7) | type StoreSlice<T> = (
FILE: src/store/config-slice.ts
type ConfigSlice (line 6) | interface ConfigSlice {
FILE: src/store/input-slice.ts
type InputSlice (line 4) | interface InputSlice {
FILE: src/store/prompt-slice.ts
type PromptSlice (line 5) | interface PromptSlice {
FILE: src/store/store.ts
type StoreState (line 30) | type StoreState = ChatSlice &
type StoreSlice (line 37) | type StoreSlice<T> = (
FILE: src/store/toast-slice.ts
type ToastSlice (line 4) | interface ToastSlice {
FILE: src/types/api.ts
type EventSourceDataInterface (line 1) | interface EventSourceDataInterface {
type EventSourceData (line 9) | type EventSourceData = EventSourceDataInterface | '[DONE]';
type EventSourceDataChoices (line 11) | interface EventSourceDataChoices {
type ShareGPTSubmitBodyInterface (line 20) | interface ShareGPTSubmitBodyInterface {
FILE: src/types/chat.ts
type Role (line 4) | type Role = 'user' | 'assistant' | 'system';
type MessageInterface (line 7) | interface MessageInterface {
type ChatInterface (line 12) | interface ChatInterface {
type ConfigInterface (line 21) | interface ConfigInterface {
type ChatHistoryInterface (line 30) | interface ChatHistoryInterface {
type ChatHistoryFolderInterface (line 36) | interface ChatHistoryFolderInterface {
type FolderCollection (line 40) | interface FolderCollection {
type Folder (line 44) | interface Folder {
type ModelOptions (line 52) | type ModelOptions =
type TotalTokenUsed (line 69) | type TotalTokenUsed = {
type LocalStorageInterfaceV0ToV1 (line 75) | interface LocalStorageInterfaceV0ToV1 {
type LocalStorageInterfaceV1ToV2 (line 84) | interface LocalStorageInterfaceV1ToV2 {
type LocalStorageInterfaceV2ToV3 (line 94) | interface LocalStorageInterfaceV2ToV3 {
type LocalStorageInterfaceV3ToV4 (line 104) | interface LocalStorageInterfaceV3ToV4 {
type LocalStorageInterfaceV4ToV5 (line 116) | interface LocalStorageInterfaceV4ToV5 {
type LocalStorageInterfaceV5ToV6 (line 128) | interface LocalStorageInterfaceV5ToV6 {
type LocalStorageInterfaceV6ToV7 (line 140) | interface LocalStorageInterfaceV6ToV7 {
type LocalStorageInterfaceV7oV8 (line 156) | interface LocalStorageInterfaceV7oV8
FILE: src/types/export.ts
type ExportBase (line 3) | interface ExportBase {
type ExportV1 (line 7) | interface ExportV1 extends ExportBase {
type OpenAIChat (line 12) | type OpenAIChat = {
FILE: src/types/google-api.ts
type GoogleFileResource (line 1) | interface GoogleFileResource {
type GoogleTokenInfo (line 8) | interface GoogleTokenInfo {
type GoogleFileList (line 20) | interface GoogleFileList {
type SyncStatus (line 27) | type SyncStatus = 'unauthenticated' | 'syncing' | 'synced';
FILE: src/types/persist.ts
type PersistStorageState (line 3) | interface PersistStorageState extends LocalStorageInterfaceV7oV8 {}
FILE: src/types/prompt.ts
type Prompt (line 1) | interface Prompt {
FILE: src/types/theme.ts
type Theme (line 1) | type Theme = 'light' | 'dark';
FILE: tailwind.config.cjs
function parentSiblingHoverPlugin (line 3) | function parentSiblingHoverPlugin({ addVariant, e }) {
Condensed preview — 279 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (526K chars).
[
{
"path": ".dockerignore",
"chars": 21,
"preview": "/.github\n/Dockerfile\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 37,
"preview": "github: [ztjhz]\nko_fi: betterchatgpt\n"
},
{
"path": ".github/workflows/deploy.yml",
"chars": 887,
"preview": "name: Deploy to GitHub Pages\n\non:\n push:\n branches: [main]\n workflow_dispatch:\n\npermissions:\n contents: read\n pag"
},
{
"path": ".github/workflows/publish.yml",
"chars": 624,
"preview": "name: Build and publish desktop app\non:\n workflow_dispatch:\n\nconcurrency:\n group: 'publish'\n cancel-in-progress: true"
},
{
"path": ".gitignore",
"chars": 268,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
},
{
"path": ".prettierrc",
"chars": 265,
"preview": "{\n \"printWidth\": 80,\n \"tabWidth\": 2,\n \"useTabs\": false,\n \"semi\": true,\n \"singleQuote\": true,\n \"jsxSingleQuote\": tr"
},
{
"path": "Dockerfile",
"chars": 487,
"preview": "FROM node:alpine\n\nRUN addgroup -S appgroup && \\\n adduser -S appuser -G appgroup && \\\n mkdir -p /home/appuser/app && \\\n"
},
{
"path": "LICENSE",
"chars": 7047,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "README-zh_CN.md",
"chars": 6706,
"preview": "<h1 align=\"center\"><b>Better ChatGPT</b></h1>\n\n<p align=\"center\">\n <a href=\"https://bettergpt.chat\" target=\"_blank\"><"
},
{
"path": "README.md",
"chars": 9445,
"preview": "<h1 align=\"center\"><b>Better ChatGPT</b></h1>\n\n<p align=\"center\">\n English Version |\n <a href=\"README-zh_CN.md\">\n "
},
{
"path": "docker-compose.yml",
"chars": 141,
"preview": "version: '3.4'\n\nservices:\n ui_dev:\n restart: always\n image: better-chat-gpt\n build:\n context: ./\n port"
},
{
"path": "electron/index.cjs",
"chars": 7014,
"preview": "const path = require('path');\n\nconst {\n app,\n shell,\n clipboard,\n dialog,\n download,\n BrowserWindow,\n Tray,\n Men"
},
{
"path": "index.html",
"chars": 1230,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-w"
},
{
"path": "package.json",
"chars": 2702,
"preview": "{\n \"name\": \"better-chatgpt\",\n \"private\": true,\n \"version\": \"1.0.5\",\n \"type\": \"module\",\n \"homepage\": \"./\",\n \"main\":"
},
{
"path": "postcss.config.cjs",
"chars": 82,
"preview": "module.exports = {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n}\n"
},
{
"path": "public/CNAME",
"chars": 14,
"preview": "bettergpt.chat"
},
{
"path": "public/locales/da/about.json",
"chars": 2542,
"preview": "{\n \"description\": \"Better ChatGPT er en fantastisk open-source webapp, der giver dig mulighed for at lege med OpenAI's "
},
{
"path": "public/locales/da/api.json",
"chars": 1506,
"preview": "{\n \"securityMessage\": \"Vi prioriterer sikkerheden af din API-nøgle og håndterer den med største omhu. Din nøgle opbevar"
},
{
"path": "public/locales/da/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/da/main.json",
"chars": 1814,
"preview": "{\n \"save\": \"Gem\",\n \"generate\": \"Generere\",\n \"cancel\": \"Annuller\",\n \"confirm\": \"Bekræft\",\n \"warning\": \"Advarsel\",\n "
},
{
"path": "public/locales/da/model.json",
"chars": 1773,
"preview": "{\n \"configuration\": \"Konfiguration\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"Det"
},
{
"path": "public/locales/de/about.json",
"chars": 2616,
"preview": "{\n \"description\": \"Better ChatGPT ist eine großartige open-source web app, welche es ermöglicht mit der ChatGPT API von"
},
{
"path": "public/locales/de/api.json",
"chars": 1670,
"preview": "{\n \"securityMessage\": \"Die Sicherheit deines API-Schlüssels ist unsere höchste Priorität. Dieser wird ausschließlich lo"
},
{
"path": "public/locales/de/drive.json",
"chars": 841,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Synchronisiere deine Chat-Verläufe und Einstellungen einfach mit Google Drive.\""
},
{
"path": "public/locales/de/main.json",
"chars": 2075,
"preview": "{\n \"save\": \"Speichern\",\n \"generate\": \"Generieren\",\n \"cancel\": \"Abbrechen\",\n \"confirm\": \"Bestätigen\",\n \"warning\": \"A"
},
{
"path": "public/locales/de/model.json",
"chars": 2094,
"preview": "{\n \"configuration\": \"Konfiguration\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"Die"
},
{
"path": "public/locales/en/about.json",
"chars": 2464,
"preview": "{\n \"description\": \"Better ChatGPT is an amazing open-source web app that allows you to play with OpenAI's ChatGPT API f"
},
{
"path": "public/locales/en/api.json",
"chars": 1438,
"preview": "{\n \"securityMessage\": \"We prioritise the security of your API key and handle it with utmost care. Your key is exclusive"
},
{
"path": "public/locales/en/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/en/main.json",
"chars": 1776,
"preview": "{\n \"save\": \"Save\",\n \"generate\": \"Generate\",\n \"cancel\": \"Cancel\",\n \"confirm\": \"Confirm\",\n \"warning\": \"Warning\",\n \"c"
},
{
"path": "public/locales/en/model.json",
"chars": 1726,
"preview": "{\n \"configuration\": \"Configuration\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"The"
},
{
"path": "public/locales/en-US/about.json",
"chars": 2464,
"preview": "{\n \"description\": \"Better ChatGPT is an amazing open-source web app that allows you to play with OpenAI's ChatGPT API f"
},
{
"path": "public/locales/en-US/api.json",
"chars": 1438,
"preview": "{\n \"securityMessage\": \"We prioritize the security of your API key and handle it with utmost care. Your key is exclusive"
},
{
"path": "public/locales/en-US/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/en-US/main.json",
"chars": 1776,
"preview": "{\n \"save\": \"Save\",\n \"generate\": \"Generate\",\n \"cancel\": \"Cancel\",\n \"confirm\": \"Confirm\",\n \"warning\": \"Warning\",\n \"c"
},
{
"path": "public/locales/en-US/model.json",
"chars": 1726,
"preview": "{\n \"configuration\": \"Configuration\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"The"
},
{
"path": "public/locales/es/about.json",
"chars": 2612,
"preview": "{\n \"description\": \"¡Better ChatGPT es una aplicación web de código abierto que te permite usar la API de OpenAI totalme"
},
{
"path": "public/locales/es/api.json",
"chars": 1649,
"preview": "{\n \"securityMessage\": \"Prioritamos la seguridad de su clave API y la tratamos con sumo cuidado. Si utiliza su propia cl"
},
{
"path": "public/locales/es/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/es/main.json",
"chars": 1923,
"preview": "{\n \"save\": \"Guardar\",\n \"generate\": \"Generar\",\n \"cancel\": \"Cancelar\",\n \"confirm\": \"Aceptar\",\n \"warning\": \"Aviso\",\n "
},
{
"path": "public/locales/es/model.json",
"chars": 2082,
"preview": "{\n \"configuration\": \"Configuración\",\n \"model\": \"Modelo\",\n \"token\": {\n \"label\": \"Máximo número de tokens\",\n \"des"
},
{
"path": "public/locales/fr/about.json",
"chars": 2782,
"preview": "{\n \"description\": \"Better ChatGPT est une application web open-source incroyable qui vous permet de jouer avec l'API Ch"
},
{
"path": "public/locales/fr/api.json",
"chars": 1709,
"preview": "{\n \"securityMessage\": \"Nous accordons la priorité à la sécurité de votre clé API et la traitons avec le plus grand soin"
},
{
"path": "public/locales/fr/drive.json",
"chars": 830,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Synchronisez vos discussions et paramètres sans effort avec Google Drive.\",\n \""
},
{
"path": "public/locales/fr/main.json",
"chars": 2020,
"preview": "{\n \"save\": \"Enregistrer\",\n \"generate\": \"Générer\",\n \"cancel\": \"Annuler\",\n \"confirm\": \"Confirmer\",\n \"warning\": \"Atten"
},
{
"path": "public/locales/fr/model.json",
"chars": 2003,
"preview": "{\n \"configuration\": \"Configuration\",\n \"model\": \"Modèle\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"Le"
},
{
"path": "public/locales/it/about.json",
"chars": 2794,
"preview": "{\n \"description\": \"Better ChatGPT è un'incredibile applicazione web open-source che permette di giocare con l'API ChatG"
},
{
"path": "public/locales/it/api.json",
"chars": 1617,
"preview": "{\n \"securityMessage\": \"Diamo priorità alla sicurezza della tua chiave API e la gestiamo con la massima cura. La chiave "
},
{
"path": "public/locales/it/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/it/main.json",
"chars": 1955,
"preview": "{\n \"save\": \"Salva\",\n \"generate\": \"Generare\",\n \"cancel\": \"Annulla\",\n \"confirm\": \"Conferma\",\n \"warning\": \"Attenzione\""
},
{
"path": "public/locales/it/model.json",
"chars": 2010,
"preview": "{\n \"configuration\": \"Configurazione\",\n \"model\": \"Modello\",\n \"token\": {\n \"label\": \"Token Massimo\",\n \"description"
},
{
"path": "public/locales/ja/about.json",
"chars": 1517,
"preview": "{\n \"description\": \"Better ChatGPTは、OpenAIのChatGPT APIを無料でお試しいただける素晴らしいオープンソースのWebアプリです!\",\n \"sourceCode\": \"GitHubで<0>ソー"
},
{
"path": "public/locales/ja/api.json",
"chars": 816,
"preview": "{\n \"securityMessage\": \"APIキーのセキュリティを最優先し、細心の注意を払って取り扱っています。キーはお客様のブラウザにのみ保存され、第三者とは一切共有されません。OpenAI APIにアクセスする目的でのみ使用され"
},
{
"path": "public/locales/ja/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/ja/main.json",
"chars": 1358,
"preview": "{\n \"save\": \"保存\",\n \"generate\": \"生成\",\n \"cancel\": \"キャンセル\",\n \"confirm\": \"確認\",\n \"warning\": \"警告\",\n \"clearMessageWarning\""
},
{
"path": "public/locales/ja/model.json",
"chars": 1062,
"preview": "{\n \"configuration\": \"設定\",\n \"model\": \"モデル\",\n \"token\": {\n \"label\": \"最大トークン数\",\n \"description\": \"チャット完了時に生成するトークンの最"
},
{
"path": "public/locales/ms/about.json",
"chars": 2720,
"preview": "{\n \"description\": \"Better ChatGPT merupakan aplikasi web sumber terbuka yang menakjubkan yang membolehkan anda bermain "
},
{
"path": "public/locales/ms/api.json",
"chars": 1646,
"preview": "{\n \"securityMessage\": \"Kami mengutamakan keselamatan kunci API anda dan mengendalikannya dengan penuh berhati-hati. Kun"
},
{
"path": "public/locales/ms/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/ms/main.json",
"chars": 1928,
"preview": "{\n \"save\": \"Simpan\",\n \"generate\": \"Hasilkan\",\n \"cancel\": \"Batal\",\n \"confirm\": \"Sahkan\",\n \"warning\": \"Amaran\",\n \"cl"
},
{
"path": "public/locales/ms/model.json",
"chars": 1879,
"preview": "{\n \"configuration\": \"Konfigurasi\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Token Maksimum\",\n \"description\": \""
},
{
"path": "public/locales/nb/about.json",
"chars": 2511,
"preview": "{\n \"description\": \"Better ChatGPT er en fantastisk åpen kildekode web-app som lar deg leke med OpenAI's ChatGPT API gra"
},
{
"path": "public/locales/nb/api.json",
"chars": 1529,
"preview": "{\n \"securityMessage\": \"Vi prioriterer sikkerheten til API-nøkkelen din og behandler den med største forsiktighet. Nøkke"
},
{
"path": "public/locales/nb/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/nb/main.json",
"chars": 1816,
"preview": "{\n \"save\": \"Lagre\",\n \"generate\": \"Generere\",\n \"cancel\": \"Avbryt\",\n \"confirm\": \"Bekreft\",\n \"warning\": \"Advarsel\",\n "
},
{
"path": "public/locales/nb/model.json",
"chars": 1778,
"preview": "{\n \"configuration\": \"Konfigurasjon\",\n \"model\": \"Modell\",\n \"token\": {\n \"label\": \"Maks Token\",\n \"description\": \"M"
},
{
"path": "public/locales/ro/about.json",
"chars": 2732,
"preview": "{\n \"description\": \"Better ChatGPT este o aplicație web uimitoare cu sursă deschisă care vă permite să vă jucați gratui"
},
{
"path": "public/locales/ro/api.json",
"chars": 1613,
"preview": "{\n \"securityMessage\": \"Prioritizează securitatea cheii tale API și o gestionăm cu cea mai mare atenție. Cheia este sto"
},
{
"path": "public/locales/ro/drive.json",
"chars": 808,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Sincronizați fără efort chaturile și setările cu Google Drive.\",\n \"buton\": "
},
{
"path": "public/locales/ro/main.json",
"chars": 2011,
"preview": "{\n \"save\": \"Salvează\",\n \"generate\": \"Generează\",\n \"cancel\": \"Anulează\",\n \"confirm\": \"Confirmați\",\n \"warning\": "
},
{
"path": "public/locales/ro/model.json",
"chars": 1938,
"preview": "{\n \"configuration\": \"Configurare\",\n \"model\": \"Model\",\n \"token\": {\n \"label\": \"Token maxim\",\n \"description\":"
},
{
"path": "public/locales/ru/about.json",
"chars": 2517,
"preview": "{\n \"description\": \"Better ChatGPT - это потрясающее открытое веб-приложение, позволяющее вам бесплатно использовать API"
},
{
"path": "public/locales/ru/api.json",
"chars": 1584,
"preview": "{\n \"securityMessage\": \"Мы приоритизируем безопасность вашего API-ключа и обращаемся с ним с максимальной осторожностью."
},
{
"path": "public/locales/ru/drive.json",
"chars": 868,
"preview": "{\n \"name\": \"Google Синхронизация\",\n \"tagline\": \"Без усилий синхронизируйте ваши чаты и настройки с Google Диском.\",\n "
},
{
"path": "public/locales/ru/main.json",
"chars": 1929,
"preview": "{\n \"save\": \"Сохранить\",\n \"generate\": \"Генерировать\",\n \"cancel\": \"Отмена\",\n \"confirm\": \"Подтвердить\",\n \"warning\": \"П"
},
{
"path": "public/locales/ru/model.json",
"chars": 1812,
"preview": "{\n \"configuration\": \"Конфигурация\",\n \"model\": \"Модель\",\n \"token\": {\n \"label\": \"Макс. токенов\",\n \"description\": "
},
{
"path": "public/locales/sv/about.json",
"chars": 2515,
"preview": "{\n \"description\": \"Better ChatGPT är en fantastisk öppen källkodswebbapp som låter dig använda OpenAI:s ChatGPT API gra"
},
{
"path": "public/locales/sv/api.json",
"chars": 1517,
"preview": "{\n \"securityMessage\": \"Vi prioriterar säkerheten för din API-nyckel och hanterar den med största omsorg. Din nyckel lag"
},
{
"path": "public/locales/sv/drive.json",
"chars": 712,
"preview": "{\n \"name\": \"Google Sync\",\n \"tagline\": \"Effortlessly synchronize your chats and settings with Google Drive.\",\n \"button"
},
{
"path": "public/locales/sv/main.json",
"chars": 1877,
"preview": "{\n \"save\": \"Spara\",\n \"generate\": \"Generera\",\n \"cancel\": \"Avbryt\",\n \"confirm\": \"Bekräfta\",\n \"warning\": \"Varning\",\n "
},
{
"path": "public/locales/sv/model.json",
"chars": 1736,
"preview": "{\n \"configuration\": \"Konfiguration\",\n \"model\": \"Modell\",\n \"token\": {\n \"label\": \"Max Token\",\n \"description\": \"De"
},
{
"path": "public/locales/vi-VN/about.json",
"chars": 2696,
"preview": "{\n \"description\": \"Better ChatGPT là một ứng dụng web nguồn mở tuyệt vời cho phép bạn sử dụng miễn phí với API ChatGPT "
},
{
"path": "public/locales/vi-VN/api.json",
"chars": 1556,
"preview": "{\n \"securityMessage\": \"Chúng tôi ưu tiên bảo mật khóa API của bạn và xử lý nó một cách cẩn thận nhất. Khóa của bạn được"
},
{
"path": "public/locales/vi-VN/drive.json",
"chars": 817,
"preview": "{\n \"name\": \"Đồng bộ với Google\",\n \"tagline\": \"Dễ dàng đồng bộ hóa các cuộc trò chuyện và cài đặt của bạn với Google Dr"
},
{
"path": "public/locales/vi-VN/main.json",
"chars": 1871,
"preview": "{\n \"save\": \"Lưu\",\n \"generate\": \"Tạo ra\",\n \"cancel\": \"Hủy bỏ\",\n \"confirm\": \"Xác nhận\",\n \"warning\": \"Cảnh báo\",\n \"cl"
},
{
"path": "public/locales/vi-VN/model.json",
"chars": 1911,
"preview": "{\n \"configuration\": \"Cấu hình\",\n \"model\": \"Mô hình\",\n \"token\": {\n \"label\": \"Mã thông báo tối đa\",\n \"description"
},
{
"path": "public/locales/zh-CN/about.json",
"chars": 1310,
"preview": "{\n \"description\": \"Better ChatGPT 是一个神奇的开源 Web 应用,允许您免费使用 OpenAI 的 ChatGPT API 进行对话!\",\n \"sourceCode\": \"在 GitHub 上查看<0>"
},
{
"path": "public/locales/zh-CN/api.json",
"chars": 689,
"preview": "{\n \"securityMessage\": \"我们高度优先考虑您的 API 密钥的安全,并非常小心地处理它。您的密钥将专门存储在您的浏览器中,并且永远不会与任何第三方实体共享。它仅用于访问 OpenAI API 的预期用途,而不是用于任何"
},
{
"path": "public/locales/zh-CN/drive.json",
"chars": 402,
"preview": "{\n \"name\": \"Google 同步\",\n \"tagline\": \"轻松地将您的聊天和设置与 Google Drive 同步。\",\n \"button\": {\n \"sync\": \"同步您的聊天\",\n \"stop\": \""
},
{
"path": "public/locales/zh-CN/main.json",
"chars": 1157,
"preview": "{\n \"save\": \"保存\",\n \"generate\": \"生成\",\n \"cancel\": \"取消\",\n \"confirm\": \"确认\",\n \"warning\": \"警告\",\n \"clearMessageWarning\": \""
},
{
"path": "public/locales/zh-CN/model.json",
"chars": 1000,
"preview": "{\n \"configuration\": \"配置\",\n \"model\": \"模型\",\n \"token\": {\n \"label\": \"最大 Token\",\n \"description\": \"助手生成一条信息可以包含的最大 to"
},
{
"path": "public/locales/zh-HK/about.json",
"chars": 1278,
"preview": "{\n \"description\": \"Better ChatGPT 係一款好犀利嘅開源 Web App,佢使用 OpenAI 嘅 ChatGPT API,令到你可以免費同 ChatGPT 傾偈!\",\n \"sourceCode\": \"喺 "
},
{
"path": "public/locales/zh-HK/api.json",
"chars": 692,
"preview": "{\n \"securityMessage\": \"我哋將你嘅 API key 嘅安全擺喺首位,非常小心噉處理佢。你嘅 key 專門儲存喺你嘅瀏覽器入面,並且唔會共享畀任何第三方實體。佢僅用於存取 OpenAI API 呢項指定用途,唔會用於任"
},
{
"path": "public/locales/zh-HK/drive.json",
"chars": 403,
"preview": "{\n \"name\": \"Google 同步\",\n \"tagline\": \"輕鬆將你嘅傾偈同設定同步至 Google Drive。\",\n \"button\": {\n \"sync\": \"同步你嘅傾偈\",\n \"stop\": \"停止"
},
{
"path": "public/locales/zh-HK/main.json",
"chars": 1196,
"preview": "{\n \"save\": \"儲存\",\n \"generate\": \"生成\",\n \"cancel\": \"取消\",\n \"confirm\": \"確認\",\n \"warning\": \"警告\",\n \"clearMessageWarning\": \""
},
{
"path": "public/locales/zh-HK/model.json",
"chars": 1051,
"preview": "{\n \"configuration\": \"設定\",\n \"model\": \"模型\",\n \"token\": {\n \"label\": \"最大 Token\",\n \"description\": \"控制助理嘅一條 msg 最多可以 g"
},
{
"path": "public/locales/zh-TW/about.json",
"chars": 1309,
"preview": "{\n \"description\": \"Better ChatGPT 是一個神奇的開源 Web 應用程式,允許您免費使用 OpenAI 的 ChatGPT API 進行對話!\",\n \"sourceCode\": \"在 GitHub 上檢視<"
},
{
"path": "public/locales/zh-TW/api.json",
"chars": 690,
"preview": "{\n \"securityMessage\": \"我們高度重視您的 API 金鑰安全,並非常小心地處理它。您的金鑰專門儲存在您的瀏覽器中,並且不會與任何第三方實體共享。它僅用於存取 OpenAI API 的指定用途,不會用於任何其他未經授權的"
},
{
"path": "public/locales/zh-TW/drive.json",
"chars": 402,
"preview": "{\n \"name\": \"Google 同步\",\n \"tagline\": \"輕鬆地將您的聊天和設定與 Google Drive 同步。\",\n \"button\": {\n \"sync\": \"同步您的聊天\",\n \"stop\": \""
},
{
"path": "public/locales/zh-TW/main.json",
"chars": 1166,
"preview": "{\n \"save\": \"儲存\",\n \"generate\": \"生成\",\n \"cancel\": \"取消\",\n \"confirm\": \"確認\",\n \"warning\": \"警告\",\n \"clearMessageWarning\": \""
},
{
"path": "public/locales/zh-TW/model.json",
"chars": 1000,
"preview": "{\n \"configuration\": \"設定\",\n \"model\": \"模型\",\n \"token\": {\n \"label\": \"最大 Token\",\n \"description\": \"助理生成一條資訊可以包含的最大 to"
},
{
"path": "src/App.tsx",
"chars": 2336,
"preview": "import React, { useEffect } from 'react';\nimport useStore from '@store/store';\nimport i18n from './i18n';\n\nimport Chat f"
},
{
"path": "src/Roboto.css",
"chars": 3041,
"preview": "/* Roboto Thin */\n@font-face {\n font-family: 'Roboto';\n src: local('Roboto Thin'),\n url('./fonts/Roboto-Thin.woff2'"
},
{
"path": "src/api/api.ts",
"chars": 4329,
"preview": "import { ShareGPTSubmitBodyInterface } from '@type/api';\nimport { ConfigInterface, MessageInterface, ModelOptions } from"
},
{
"path": "src/api/google-api.ts",
"chars": 4993,
"preview": "import { debounce } from 'lodash';\nimport { StorageValue } from 'zustand/middleware';\nimport useStore from '@store/store"
},
{
"path": "src/api/helper.ts",
"chars": 1150,
"preview": "import { EventSourceData } from '@type/api';\n\nexport const parseEventSource = (\n data: string\n): '[DONE]' | EventSource"
},
{
"path": "src/assets/icons/AboutIcon.tsx",
"chars": 512,
"preview": "import React from 'react';\n\nconst AboutIcon = () => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n "
},
{
"path": "src/assets/icons/ArrowBottom.tsx",
"chars": 533,
"preview": "import React from 'react';\n\nconst ArrowBottom = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n vi"
},
{
"path": "src/assets/icons/CalculatorIcon.tsx",
"chars": 1056,
"preview": "import React from 'react';\n\nconst CalculatorIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n "
},
{
"path": "src/assets/icons/ChatIcon.tsx",
"chars": 465,
"preview": "import React from 'react';\n\nconst ChatIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/CloneIcon.tsx",
"chars": 670,
"preview": "import React from 'react';\n\nconst CloneIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n view"
},
{
"path": "src/assets/icons/ColorPaletteIcon.tsx",
"chars": 833,
"preview": "import React from 'react';\n\nconst ColorPaletteIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n "
},
{
"path": "src/assets/icons/CopyIcon.tsx",
"chars": 543,
"preview": "import React from 'react';\n\nconst CopyIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/CrossIcon.tsx",
"chars": 481,
"preview": "import React from 'react';\n\nconst CrossIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n"
},
{
"path": "src/assets/icons/CrossIcon2.tsx",
"chars": 560,
"preview": "import React from 'react';\n\nconst CrossIcon2 = () => {\n return (\n <svg\n aria-hidden='true'\n className='w-5"
},
{
"path": "src/assets/icons/DeleteIcon.tsx",
"chars": 640,
"preview": "import React from 'react';\n\nconst DeleteIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'"
},
{
"path": "src/assets/icons/DownArrow.tsx",
"chars": 543,
"preview": "import React from 'react';\n\nconst DownArrow = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n stro"
},
{
"path": "src/assets/icons/DownChevronArrow.tsx",
"chars": 500,
"preview": "import React from 'react';\n\nconst DownChevronArrow = ({ className }: { className?: string }) => {\n return (\n <svg\n "
},
{
"path": "src/assets/icons/EditIcon.tsx",
"chars": 492,
"preview": "import React from 'react';\n\nconst EditIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/EditIcon2.tsx",
"chars": 544,
"preview": "import React from 'react';\n\nconst EditIcon2 = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n"
},
{
"path": "src/assets/icons/ExportIcon.tsx",
"chars": 542,
"preview": "import React from 'react';\n\nconst ExportIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n fil"
},
{
"path": "src/assets/icons/FileTextIcon.tsx",
"chars": 709,
"preview": "import React from 'react';\n\nconst FileTextIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n v"
},
{
"path": "src/assets/icons/FolderIcon.tsx",
"chars": 490,
"preview": "import React from 'react';\n\nconst FolderIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n vie"
},
{
"path": "src/assets/icons/GoogleIcon.tsx",
"chars": 644,
"preview": "import React from 'react';\n\nconst GoogleIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n fil"
},
{
"path": "src/assets/icons/HeartIcon.tsx",
"chars": 540,
"preview": "import React from 'react';\n\nconst HeartIcon = () => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n "
},
{
"path": "src/assets/icons/ImageIcon.tsx",
"chars": 709,
"preview": "import React from 'react';\n\nconst ImageIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n view"
},
{
"path": "src/assets/icons/JsonIcon.tsx",
"chars": 2249,
"preview": "import React from 'react';\n\nconst JsonIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n fill="
},
{
"path": "src/assets/icons/LinkIcon.tsx",
"chars": 563,
"preview": "import React from 'react';\n\nconst LinkIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/LogoutIcon.tsx",
"chars": 552,
"preview": "import React from 'react';\n\nconst LogoutIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'"
},
{
"path": "src/assets/icons/MarkdownIcon.tsx",
"chars": 821,
"preview": "import React from 'react';\n\nconst MarkdownIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n v"
},
{
"path": "src/assets/icons/MenuIcon.tsx",
"chars": 585,
"preview": "import React from 'react';\n\nconst MenuIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n strok"
},
{
"path": "src/assets/icons/MoneyIcon.tsx",
"chars": 506,
"preview": "import React from 'react';\n\nconst MoneyIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n view"
},
{
"path": "src/assets/icons/MoonIcon.tsx",
"chars": 451,
"preview": "import React from 'react';\n\nconst MoonIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/NewFolderIcon.tsx",
"chars": 837,
"preview": "import React from 'react';\n\nconst NewFolderIcon = ({ className }: { className?: string }) => {\n return (\n <svg\n "
},
{
"path": "src/assets/icons/PdfIcon.tsx",
"chars": 1355,
"preview": "import React from 'react';\n\nconst PdfIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n viewBo"
},
{
"path": "src/assets/icons/PersonIcon.tsx",
"chars": 494,
"preview": "import React from 'react';\n\nconst PersonIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'"
},
{
"path": "src/assets/icons/PlusIcon.tsx",
"chars": 544,
"preview": "import React from 'react';\n\nconst PlusIcon = ({ className }: { className?: string }) => {\n return (\n <svg\n stro"
},
{
"path": "src/assets/icons/RefreshIcon.tsx",
"chars": 638,
"preview": "import React from 'react';\n\nconst RefreshIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n st"
},
{
"path": "src/assets/icons/SendIcon.tsx",
"chars": 496,
"preview": "import React from 'react';\n\nconst SendIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/SettingIcon.tsx",
"chars": 1627,
"preview": "import React from 'react';\n\nconst SettingIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xm"
},
{
"path": "src/assets/icons/SpinnerIcon.tsx",
"chars": 1371,
"preview": "import React from 'react';\n\nconst SpinnerIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n ar"
},
{
"path": "src/assets/icons/SunIcon.tsx",
"chars": 875,
"preview": "import React from 'react';\n\nconst SunIcon = () => {\n return (\n <svg\n stroke='currentColor'\n fill='none'\n "
},
{
"path": "src/assets/icons/TickIcon.tsx",
"chars": 484,
"preview": "import React from 'react';\n\nconst TickIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n strok"
},
{
"path": "src/components/AboutMenu/AboutMenu.tsx",
"chars": 5426,
"preview": "import React, { useState } from 'react';\nimport { useTranslation, Trans } from 'react-i18next';\nimport PopupModal from '"
},
{
"path": "src/components/AboutMenu/index.ts",
"chars": 39,
"preview": "export { default } from './AboutMenu';\n"
},
{
"path": "src/components/ApiMenu/ApiMenu.tsx",
"chars": 5522,
"preview": "import React, { useEffect, useState } from 'react';\nimport { useTranslation, Trans } from 'react-i18next';\nimport useSto"
},
{
"path": "src/components/ApiMenu/index.ts",
"chars": 37,
"preview": "export { default } from './ApiMenu';\n"
},
{
"path": "src/components/ApiPopup/ApiPopup.tsx",
"chars": 3469,
"preview": "import React, { useEffect, useState } from 'react';\nimport useStore from '@store/store';\nimport { useTranslation, Trans "
},
{
"path": "src/components/ApiPopup/index.ts",
"chars": 38,
"preview": "export { default } from './ApiPopup';\n"
},
{
"path": "src/components/Chat/Chat.tsx",
"chars": 705,
"preview": "import React from 'react';\nimport useStore from '@store/store';\n\nimport ChatContent from './ChatContent';\nimport MobileB"
},
{
"path": "src/components/Chat/ChatContent/ChatContent.tsx",
"chars": 4086,
"preview": "import React, { useEffect, useRef } from 'react';\nimport ScrollToBottom from 'react-scroll-to-bottom';\nimport useStore f"
},
{
"path": "src/components/Chat/ChatContent/ChatTitle.tsx",
"chars": 3361,
"preview": "import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { shallow } f"
},
{
"path": "src/components/Chat/ChatContent/CloneChat.tsx",
"chars": 1584,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useStore from '@store/st"
},
{
"path": "src/components/Chat/ChatContent/DownloadChat.tsx",
"chars": 4313,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useStore from '@store/st"
},
{
"path": "src/components/Chat/ChatContent/Message/Avatar.tsx",
"chars": 5615,
"preview": "import React from 'react';\nimport { Role } from '@type/chat';\nimport SettingIcon from '@icon/SettingIcon';\nimport Person"
},
{
"path": "src/components/Chat/ChatContent/Message/CodeBlock.tsx",
"chars": 1665,
"preview": "import React, { useRef, useState } from 'react';\n\nimport CopyIcon from '@icon/CopyIcon';\nimport TickIcon from '@icon/Tic"
},
{
"path": "src/components/Chat/ChatContent/Message/CommandPrompt/CommandPrompt.tsx",
"chars": 2759,
"preview": "import React, { useEffect, useRef, useState } from 'react';\nimport useStore from '@store/store';\n\nimport { useTranslatio"
},
{
"path": "src/components/Chat/ChatContent/Message/CommandPrompt/index.ts",
"chars": 43,
"preview": "export { default } from './CommandPrompt';\n"
},
{
"path": "src/components/Chat/ChatContent/Message/Message.tsx",
"chars": 1816,
"preview": "import React from 'react';\nimport useStore from '@store/store';\n\nimport Avatar from './Avatar';\nimport MessageContent fr"
},
{
"path": "src/components/Chat/ChatContent/Message/MessageContent.tsx",
"chars": 1027,
"preview": "import React, { useState } from 'react';\nimport useStore from '@store/store';\n\nimport ContentView from './View/ContentVi"
},
{
"path": "src/components/Chat/ChatContent/Message/NewMessageButton.tsx",
"chars": 1984,
"preview": "import React from 'react';\nimport useStore from '@store/store';\n\nimport PlusIcon from '@icon/PlusIcon';\n\nimport { ChatIn"
},
{
"path": "src/components/Chat/ChatContent/Message/RoleSelector.tsx",
"chars": 2499,
"preview": "import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/BaseButton.tsx",
"chars": 719,
"preview": "import React from 'react';\n\nconst BaseButton = ({\n onClick,\n icon,\n buttonProps,\n}: {\n onClick: React.MouseEventHand"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/CopyButton.tsx",
"chars": 660,
"preview": "import React, { useState } from 'react';\n\nimport TickIcon from '@icon/TickIcon';\nimport CopyIcon from '@icon/CopyIcon';\n"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/DeleteButton.tsx",
"chars": 465,
"preview": "import React, { memo } from 'react';\n\nimport DeleteIcon from '@icon/DeleteIcon';\n\nimport BaseButton from './BaseButton';"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/DownButton.tsx",
"chars": 412,
"preview": "import React from 'react';\n\nimport DownChevronArrow from '@icon/DownChevronArrow';\n\nimport BaseButton from './BaseButton"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/EditButton.tsx",
"chars": 450,
"preview": "import React, { memo } from 'react';\n\nimport EditIcon2 from '@icon/EditIcon2';\n\nimport BaseButton from './BaseButton';\n\n"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/MarkdownModeButton.tsx",
"chars": 660,
"preview": "import React, { useState } from 'react';\n\nimport useStore from '@store/store';\n\nimport BaseButton from './BaseButton';\n\n"
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/RefreshButton.tsx",
"chars": 403,
"preview": "import React from 'react';\n\nimport RefreshIcon from '@icon/RefreshIcon';\n\nimport BaseButton from './BaseButton';\n\nconst "
},
{
"path": "src/components/Chat/ChatContent/Message/View/Button/UpButton.tsx",
"chars": 429,
"preview": "import React from 'react';\n\nimport DownChevronArrow from '@icon/DownChevronArrow';\n\nimport BaseButton from './BaseButton"
},
{
"path": "src/components/Chat/ChatContent/Message/View/ContentView.tsx",
"chars": 6116,
"preview": "import React, {\n DetailedHTMLProps,\n HTMLAttributes,\n memo,\n useState,\n} from 'react';\n\nimport ReactMarkdown from 'r"
},
{
"path": "src/components/Chat/ChatContent/Message/View/EditView.tsx",
"chars": 7438,
"preview": "import React, { memo, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useStor"
},
{
"path": "src/components/Chat/ChatContent/Message/index.ts",
"chars": 37,
"preview": "export { default } from './Message';\n"
},
{
"path": "src/components/Chat/ChatContent/ScrollToBottomButton.tsx",
"chars": 701,
"preview": "import React from 'react';\nimport { useAtBottom, useScrollToBottom } from 'react-scroll-to-bottom';\n\nimport DownArrow fr"
},
{
"path": "src/components/Chat/ChatContent/index.ts",
"chars": 41,
"preview": "export { default } from './ChatContent';\n"
},
{
"path": "src/components/Chat/ChatInput.tsx",
"chars": 1637,
"preview": "import React from 'react';\nimport RefreshIcon from '@icon/RefreshIcon';\nimport SendIcon from '@icon/SendIcon';\n\nconst Ch"
},
{
"path": "src/components/Chat/index.ts",
"chars": 34,
"preview": "export { default } from './Chat';\n"
},
{
"path": "src/components/ChatConfigMenu/ChatConfigMenu.tsx",
"chars": 5425,
"preview": "import React, { useState } from 'react';\nimport useStore from '@store/store';\nimport { useTranslation } from 'react-i18n"
},
{
"path": "src/components/ChatConfigMenu/index.ts",
"chars": 44,
"preview": "export { default } from './ChatConfigMenu';\n"
},
{
"path": "src/components/ConfigMenu/ConfigMenu.tsx",
"chars": 8426,
"preview": "import React, { useEffect, useRef, useState } from 'react';\nimport useStore from '@store/store';\nimport { useTranslation"
},
{
"path": "src/components/ConfigMenu/index.ts",
"chars": 40,
"preview": "export { default } from './ConfigMenu';\n"
},
{
"path": "src/components/GoogleSync/GoogleSync.tsx",
"chars": 11954,
"preview": "import React, { useEffect, useState } from 'react';\nimport { GoogleOAuthProvider } from '@react-oauth/google';\nimport { "
},
{
"path": "src/components/GoogleSync/GoogleSyncButton.tsx",
"chars": 2359,
"preview": "import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useGoogleLogin, goog"
},
{
"path": "src/components/GoogleSync/index.ts",
"chars": 40,
"preview": "export { default } from './GoogleSync';\n"
},
{
"path": "src/components/ImportExportChat/ExportChat.tsx",
"chars": 916,
"preview": "import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport useStore from '@store/store';\n\nimport"
},
{
"path": "src/components/ImportExportChat/ImportChat.tsx",
"chars": 5903,
"preview": "import React, { useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { v4 as uuidv4 }"
},
{
"path": "src/components/ImportExportChat/ImportChatOpenAI.tsx",
"chars": 2545,
"preview": "import React, { useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport useStore from '@store/sto"
},
{
"path": "src/components/ImportExportChat/ImportExportChat.tsx",
"chars": 1350,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport ExportIcon from '@icon/"
},
{
"path": "src/components/ImportExportChat/index.ts",
"chars": 46,
"preview": "export { default } from './ImportExportChat';\n"
},
{
"path": "src/components/LanguageSelector/LanguageSelector.tsx",
"chars": 1764,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport DownChevronArrow from '"
},
{
"path": "src/components/LanguageSelector/index.ts",
"chars": 46,
"preview": "export { default } from './LanguageSelector';\n"
},
{
"path": "src/components/Menu/ChatFolder.tsx",
"chars": 10031,
"preview": "import React, { useEffect, useRef, useState } from 'react';\nimport useStore from '@store/store';\n\nimport DownChevronArro"
},
{
"path": "src/components/Menu/ChatHistory.tsx",
"chars": 5351,
"preview": "import React, { useEffect, useRef, useState } from 'react';\n\nimport useInitialiseNewChat from '@hooks/useInitialiseNewCh"
},
{
"path": "src/components/Menu/ChatHistoryList.tsx",
"chars": 5405,
"preview": "import React, { useEffect, useRef, useState } from 'react';\nimport useStore from '@store/store';\nimport { shallow } from"
},
{
"path": "src/components/Menu/ChatSearch.tsx",
"chars": 904,
"preview": "import React, { useEffect, useRef, useState } from 'react';\nimport { debounce } from 'lodash';\nimport useStore from '@st"
},
{
"path": "src/components/Menu/Menu.tsx",
"chars": 2893,
"preview": "import React, { useEffect, useRef } from 'react';\n\nimport useStore from '@store/store';\n\nimport NewChat from './NewChat'"
},
{
"path": "src/components/Menu/MenuOptions/Account.tsx",
"chars": 337,
"preview": "import React from 'react';\nimport PersonIcon from '@icon/PersonIcon';\n\nconst Account = () => {\n return (\n <a classNa"
},
{
"path": "src/components/Menu/MenuOptions/Api.tsx",
"chars": 714,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport PersonIcon from '@icon/"
},
{
"path": "src/components/Menu/MenuOptions/ClearConversation.tsx",
"chars": 1210,
"preview": "import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useStore from '@store/st"
},
{
"path": "src/components/Menu/MenuOptions/CollapseOptions.tsx",
"chars": 678,
"preview": "import ArrowBottom from '@icon/ArrowBottom';\nimport useStore from '@store/store';\n\nconst CollapseOptions = () => {\n con"
}
]
// ... and 79 more files (download for full content)
About this extraction
This page contains the full source code of the ztjhz/ChatGPTFreeApp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 279 files (451.7 KB), approximately 139.6k tokens, and a symbol index with 51 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.