diff --git a/i18n.lock b/i18n.lock index 498e5eec0..c61253cfc 100644 --- a/i18n.lock +++ b/i18n.lock @@ -10,10 +10,10 @@ checksums: content/6: e8f224099ddfc434b281b592575f8606 content/7: 463b13b8d939ec534c0b9d3245deeb96 content/8: 694bfbbfabb3f70982aebfe8fa249e58 - content/9: ac101930f55ee78edf9220bb23b8a672 + content/9: a39f42026429684441827821e2e8d891 content/10: a9c2e4ade137ba3d8978b9b7988929cf - content/11: c862ebfb07dd4a4d421a049fadb164ff - content/12: 5ed47675e7c56808a363b391240560c4 + content/11: db8d8472c95426545bb1f80956e2eeed + content/12: ec6c7831617bf0358043e4683a6fd618 content/13: 0d25961f9ce4056854c9d5ad9ccbc1c8 content/14: 51adf33450cab2ef392e93147386647c content/15: 60bb4098369f54ba8a72bac60076b218 @@ -22,19 +22,19 @@ checksums: content/18: 51adf33450cab2ef392e93147386647c content/19: 48669d7fc8bb5f765e87ffd5386d61a1 content/20: 21041825a02a64079cd88fb8ca132fe0 - content/21: d7aa1c6d4213c49b3b731db4d42ea2c2 + content/21: c60c699a88f37ef6b6e1cca240c14dd7 content/22: 68a3343deee29d5198c6b13c7a42d3da content/23: c7782476858462e82e4aaeea744ba5be content/24: 51adf33450cab2ef392e93147386647c content/25: 0395d8b4658fbae7c47c28f560fe5ec5 content/26: 3362f6e2c4992a99a372cf1bb5c97dfe - content/27: c9ac6c4175c8c546fe96dcb2ee7bc79c + content/27: d541ec61d004d8bfaf981405c8eb50a9 content/28: 5770157db19da195d00b4155abda32c2 content/29: 07361c5ebf2a4301e9aa944727ceee49 content/30: 51adf33450cab2ef392e93147386647c content/31: e7b9bbce52747d42f1f937afa30dd8f2 content/32: 3e790a0a44a7eba77ab4c3d3d1f4097f - content/33: 875f6ebbe4066af763d8839226f68117 + content/33: 0ad1a51ba5c894a605013221cc227d59 content/34: 570ef7c205f6cb50d90fd69efa0b90ee content/35: 19c4c0ed72392d7d53fd1d0a75f7fcf1 content/36: 51adf33450cab2ef392e93147386647c @@ -48,4 +48,4 @@ checksums: content/44: 3194966101f0d8ea12b02a4dcaa34d0e content/45: f8c2f53155acc08b4ced42864d396221 content/46: a7e55efdfe928b7ad5ae138eb744811b - content/47: e65c5e6c651482c696c3e8d21618eb24 + content/47: 0d3adbe3787bc7f85b0fcf53c4e388fd diff --git a/readme/bn.md b/readme/bn.md index d336e4c37..5b0fcddbd 100644 --- a/readme/bn.md +++ b/readme/bn.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -`next build` চালান এবং স্প্যানিশ ও ফরাসি বান্ডলগুলি দেখুন ✨ +`next build` চালান এবং স্প্যানিশ ও ফরাসি বান্ডেল বের হতে দেখুন ✨ সম্পূর্ণ গাইডের জন্য [ডকুমেন্টেশন পড়ুন →](https://lingo.dev/compiler), এবং আপনার সেটআপে সাহায্য পেতে [আমাদের ডিসকর্ডে যোগ দিন](https://lingo.dev/go/discord)। @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -আপনার ভাষা দেখতে পাচ্ছেন না? এটি [`i18n.json`](./i18n.json) এ যোগ করুন এবং একটি পিআর খুলুন! +আপনার ভাষা দেখছেন না? এটি [`i18n.json`](./i18n.json)-এ যোগ করুন এবং একটি PR খুলুন! diff --git a/readme/de.md b/readme/de.md index 38b0db189..d1dae321a 100644 --- a/readme/de.md +++ b/readme/de.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Führe `next build` aus und sieh zu, wie spanische und französische Bundles erscheinen ✨ +Führen Sie `next build` aus und beobachten Sie, wie spanische und französische Bundles erscheinen ✨ [Dokumentation lesen →](https://lingo.dev/compiler) für die vollständige Anleitung und [tritt unserem Discord bei](https://lingo.dev/go/discord), um Hilfe bei deiner Einrichtung zu erhalten. @@ -209,4 +209,4 @@ Wenn Ihnen gefällt, was wir tun, geben Sie uns einen ⭐ und helfen Sie uns, 6. [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -Deine Sprache ist nicht dabei? Füge sie zu [`i18n.json`](./i18n.json) hinzu und eröffne einen PR! +Ihre Sprache ist nicht dabei? Fügen Sie sie zu [`i18n.json`](./i18n.json) hinzu und öffnen Sie einen PR! diff --git a/readme/es.md b/readme/es.md index 6d02f46a8..3b46f1599 100644 --- a/readme/es.md +++ b/readme/es.md @@ -209,4 +209,4 @@ Si te gusta lo que hacemos, danos una ⭐ y ayúdanos a alcanzar las 6000 estrel [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -¿No ves tu idioma? ¡Añádelo a [`i18n.json`](./i18n.json) y abre un PR! +¿No ves tu idioma? Añádelo a [`i18n.json`](./i18n.json) y abre un PR! diff --git a/readme/fa.md b/readme/fa.md index 52a722cda..0b9182262 100644 --- a/readme/fa.md +++ b/readme/fa.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -دستور `next build` را اجرا کنید و ببینید که بسته‌های اسپانیایی و فرانسوی ظاهر می‌شوند ✨ +دستور `next build` را اجرا کنید و شاهد ظهور بسته‌های اسپانیایی و فرانسوی باشید ✨ برای راهنمای کامل [مستندات را بخوانید →](https://lingo.dev/compiler) و برای دریافت کمک در راه‌اندازی به [دیسکورد ما بپیوندید](https://lingo.dev/go/discord). diff --git a/readme/fr.md b/readme/fr.md index 152dad70d..396512771 100644 --- a/readme/fr.md +++ b/readme/fr.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Exécutez `next build` et regardez les bundles en espagnol et en français apparaître ✨ +Exécutez `next build` et regardez les bundles espagnol et français apparaître ✨ [Consultez la documentation →](https://lingo.dev/compiler) pour le guide complet, et [rejoignez notre Discord](https://lingo.dev/go/discord) pour obtenir de l'aide avec votre configuration. diff --git a/readme/he.md b/readme/he.md index 3983c6810..286f3d847 100644 --- a/readme/he.md +++ b/readme/he.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -הרץ `next build` וצפה בחבילות ספרדית וצרפתית מופיעות ✨ +הרץ `next build` וצפה בחבילות הספרדית והצרפתית מופיעות ✨ [קרא את התיעוד ←](https://lingo.dev/compiler) למדריך המלא, ו[הצטרף לדיסקורד שלנו](https://lingo.dev/go/discord) כדי לקבל עזרה בהגדרה שלך. @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -לא רואים את השפה שלכם? הוסיפו אותה ל-[`i18n.json`](./i18n.json) ופתחו PR! +לא רואה את השפה שלך? הוסף אותה ל-[`i18n.json`](./i18n.json) ופתח PR! diff --git a/readme/hi.md b/readme/hi.md index 87edfcb53..7774f6fd9 100644 --- a/readme/hi.md +++ b/readme/hi.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -`next build` चलाएं और स्पेनिश और फ्रेंच बंडल्स को बाहर आते देखें ✨ +`next build` चलाएं और स्पेनिश और फ्रेंच बंडल देखें ✨ पूरी गाइड के लिए [दस्तावेज़ पढ़ें →](https://lingo.dev/compiler), और अपने सेटअप में मदद पाने के लिए [हमारे Discord से जुड़ें](https://lingo.dev/go/discord)। @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -अपनी भाषा नहीं दिख रही है? इसे [`i18n.json`](./i18n.json) में जोड़ें और एक पीआर खोलें! +अपनी भाषा नहीं दिख रही? इसे [`i18n.json`](./i18n.json) में जोड़ें और PR खोलें! diff --git a/readme/it.md b/readme/it.md index f0a82dfa0..242cd4984 100644 --- a/readme/it.md +++ b/readme/it.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Esegui `next build` e guarda apparire i bundle in spagnolo e francese ✨ +Esegui `next build` e guarda i bundle spagnoli e francesi apparire ✨ [Leggi la documentazione →](https://lingo.dev/compiler) per la guida completa, e [Unisciti al nostro Discord](https://lingo.dev/go/discord) per ricevere aiuto con la tua configurazione. diff --git a/readme/ja.md b/readme/ja.md index 5ab43213c..811f8661f 100644 --- a/readme/ja.md +++ b/readme/ja.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -`next build` を実行すると、スペイン語とフランス語のバンドルが自動的に生成されます ✨ +`next build`を実行すると、スペイン語とフランス語のバンドルが生成されます✨ 完全なガイドは[ドキュメントを読む →](https://lingo.dev/compiler)をご覧ください。セットアップのサポートが必要な場合は[Discordに参加](https://lingo.dev/go/discord)してください。 @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -あなたの言語が見つかりませんか?[`i18n.json`](./i18n.json)に追加してPRを開いてください! +お使いの言語が見つかりませんか?[`i18n.json`](./i18n.json)に追加してPRを開いてください! diff --git a/readme/ko.md b/readme/ko.md index f72037c38..3c3df7600 100644 --- a/readme/ko.md +++ b/readme/ko.md @@ -98,7 +98,7 @@ export default async function (): Promise { } ``` -`next build`를 실행하고 스페인어와 프랑스어 번들이 생성되는 것을 확인하세요 ✨ +`next build`를 실행하면 스페인어와 프랑스어 번들이 생성됩니다 ✨ 전체 가이드는 [문서 읽기 →](https://lingo.dev/compiler)를 참조하고, 설정에 도움이 필요하면 [Discord에 참여하세요](https://lingo.dev/go/discord). @@ -208,4 +208,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -원하는 언어가 보이지 않나요? [`i18n.json`](./i18n.json)에 추가하고 PR을 열어주세요! +원하는 언어가 없나요? [`i18n.json`](./i18n.json)에 추가하고 PR을 열어주세요! diff --git a/readme/pl.md b/readme/pl.md index 09ad222bb..af39be82f 100644 --- a/readme/pl.md +++ b/readme/pl.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Uruchom `next build` i zobacz, jak pojawiają się pakiety w języku hiszpańskim i francuskim ✨ +Uruchom `next build` i zobacz, jak pojawiają się paczki hiszpańskie i francuskie ✨ [Przeczytaj dokumentację →](https://lingo.dev/compiler), aby uzyskać pełny przewodnik, oraz [Dołącz do naszego Discorda](https://lingo.dev/go/discord), aby uzyskać pomoc przy konfiguracji. diff --git a/readme/pt-BR.md b/readme/pt-BR.md index 8a15bf412..6c1769130 100644 --- a/readme/pt-BR.md +++ b/readme/pt-BR.md @@ -209,4 +209,4 @@ Se você gosta do que estamos fazendo, nos dê uma ⭐ e nos ajude a alcançar 6 [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -Não vê seu idioma? Adicione-o ao [`i18n.json`](./i18n.json) e abra um PR! +Não vê o seu idioma? Adicione-o em [`i18n.json`](./i18n.json) e abra um PR! diff --git a/readme/ru.md b/readme/ru.md index e6bafd51b..8e14f0769 100644 --- a/readme/ru.md +++ b/readme/ru.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Запустите `next build` и наблюдайте, как появляются сборки на испанском и французском языках ✨ +Запусти `next build` и смотри, как появляются бандлы для испанского и французского ✨ [Читать документацию →](https://lingo.dev/compiler) для полного руководства, а также [Присоединяйтесь к нашему Discord](https://lingo.dev/go/discord), чтобы получить помощь с настройкой. @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -Не видите своего языка? Добавьте его в [`i18n.json`](./i18n.json) и откройте PR! +Не видишь свой язык? Добавь его в [`i18n.json`](./i18n.json) и создай PR! diff --git a/readme/uk-UA.md b/readme/uk-UA.md index 784525b1e..66d790f4e 100644 --- a/readme/uk-UA.md +++ b/readme/uk-UA.md @@ -99,7 +99,7 @@ export default async function (): Promise { } ``` -Запустіть `next build` і спостерігайте, як з'являються іспанські та французькі пакети ✨ +Запустіть `next build` і спостерігайте, як з'являються іспанські та французькі бандли ✨ [Читайте документацію →](https://lingo.dev/compiler) для повного керівництва та [приєднуйтесь до нашого Discord](https://lingo.dev/go/discord), щоб отримати допомогу з налаштуванням. @@ -209,4 +209,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -Не бачите своєї мови? Додайте її до [`i18n.json`](./i18n.json) і відкрийте PR! +Не бачите свою мову? Додайте її до [`i18n.json`](./i18n.json) і відкрийте PR! diff --git a/readme/ur.md b/readme/ur.md index b27b592ae..4ff058b3e 100644 --- a/readme/ur.md +++ b/readme/ur.md @@ -132,9 +132,22 @@ npm install @lingo.dev/compiler ایک مرتبہ انسٹال کریں: ----CODE-PLACEHOLDER-681c094f641f13a112a2a2e2787--- +```ts +import type { NextConfig } from "next"; +import { withLingo } from "@lingo.dev/compiler/next"; + +const nextConfig: NextConfig = {}; + +export default async function (): Promise { + return await withLingo(nextConfig, { + sourceLocale: "en", + targetLocales: ["es", "fr"], + models: "lingo.dev", + }); +} +``` -اپنے build کنفیگ میں فعال کریں: +`next build` چلائیں اور ہسپانوی اور فرانسیسی بنڈلز کو نمودار ہوتے دیکھیں ✨ ```js import lingoCompiler from "lingo.dev/compiler"; @@ -166,7 +179,9 @@ export default lingoCompiler.next({ --- -### ⚡️ Lingo.dev CLI +```bash +npx lingo.dev@latest run +``` اپنے ٹرمینل سے براہِ راست کوڈ اور مواد کا ترجمہ کریں۔ @@ -180,7 +195,20 @@ npx lingo.dev@latest run --- -### 🔄 Lingo.dev CI/CD +```yaml +# .github/workflows/i18n.yml +name: Lingo.dev i18n +on: [push] + +jobs: + i18n: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: lingodotdev/lingo.dev@main + with: + api-key: ${{ secrets.LINGODOTDEV_API_KEY }} +``` تراجم کو خودکار انداز میں شپ کریں۔ @@ -205,7 +233,25 @@ jobs: --- -### 🧩 Lingo.dev SDK +```ts +import { LingoDotDevEngine } from "lingo.dev/sdk"; + +const lingoDotDev = new LingoDotDevEngine({ + apiKey: "your-api-key-here", +}); + +const content = { + greeting: "Hello", + farewell: "Goodbye", + message: "Welcome to our platform", +}; + +const translated = await lingoDotDev.localizeObject(content, { + sourceLocale: "en", + targetLocale: "es", +}); +// Returns: { greeting: "Hola", farewell: "Adiós", message: "Bienvenido a nuestra plataforma" } +``` ڈائنامک مواد کے لیے ہر درخواست پر فوری ترجمہ۔ @@ -251,4 +297,4 @@ const translated = await lingoDotDev.localizeObject(content, { ](https://www.star-history.com/#lingodotdev/lingo.dev&Date) -## 🌐 دیگر زبانوں میں ریڈمی +اپنی زبان نظر نہیں آرہی؟ اسے [`i18n.json`](./i18n.json) میں شامل کریں اور PR کھولیں! diff --git a/readme/zh-Hans.md b/readme/zh-Hans.md index 0468ff663..5eb5a5ff6 100644 --- a/readme/zh-Hans.md +++ b/readme/zh-Hans.md @@ -98,7 +98,7 @@ export default async function (): Promise { } ``` -运行 `next build`,即可看到西班牙语和法语的构建包 ✨ +运行 `next build`,即可看到西班牙语和法语的 bundle 自动生成 ✨ [阅读文档 →](https://lingo.dev/compiler) 获取完整指南,并 [加入我们的 Discord](https://lingo.dev/go/discord) 以获取设置帮助。 @@ -208,4 +208,4 @@ const translated = await lingoDotDev.localizeObject(content, { [English](https://github.com/lingodotdev/lingo.dev) • [中文](/readme/zh-Hans.md) • [日本語](/readme/ja.md) • [한국어](/readme/ko.md) • [Español](/readme/es.md) • [Français](/readme/fr.md) • [Русский](/readme/ru.md) • [Українська](/readme/uk-UA.md) • [Deutsch](/readme/de.md) • [Italiano](/readme/it.md) • [العربية](/readme/ar.md) • [עברית](/readme/he.md) • [हिन्दी](/readme/hi.md) • [বাংলা](/readme/bn.md) • [فارسی](/readme/fa.md) • [Bhojpuri](/readme/bho.md) -没有看到您的语言?将其添加到 [`i18n.json`](./i18n.json) 并提交一个 PR! +没有看到你的语言?请将其添加到 [`i18n.json`](./i18n.json) 并提交 PR!