Skip to content

Added app_ar.arb to support Arabic translation ... #708

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions assets/l10n/app_ar.arb
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
{
"@@locale": "ar",
"@@last_modified": "2024-05-23T13:20:40+02:00",
"aboutPageTitle": "حول Zulip",
"aboutPageAppVersion": "إصدار التطبيق",
"aboutPageOpenSourceLicenses": "رخص البرمجيات مفتوحة المصدر",
"aboutPageTapToView": "انقر للعرض",
"chooseAccountPageTitle": "اختر الحساب",
"chooseAccountButtonAddAnAccount": "إضافة حساب",
"profileButtonSendDirectMessage": "إرسال رسالة مباشرة",
"permissionsNeededTitle": "الصلاحيات المطلوبة",
"permissionsNeededOpenSettings": "فتح الإعدادات",
"permissionsDeniedCameraAccess": "لتحميل صورة، يرجى منح Zulip صلاحيات إضافية في الإعدادات.",
"permissionsDeniedReadExternalStorage": "لتحميل صورة، يرجى منح Zulip صلاحيات إضافية في الإعدادات.",
"actionSheetOptionCopy": "نسخ نص الرسالة",
"actionSheetOptionShare": "شارك",
"actionSheetOptionQuoteAndReply": "الاقتباس والرد",
"actionSheetOptionStarMessage": "رسالة مميزة بنجمة",
"actionSheetOptionUnstarMessage": "إلغاء تمييز الرسالة",
"errorWebAuthOperationalErrorTitle": "حدث خطأ ما",
"errorWebAuthOperationalError": "حدث خطأ غير متوقع.",
"errorAccountLoggedInTitle": "تم تسجيل الدخول إلى الحساب بالفعل",
"errorAccountLoggedIn": "الحساب {email} في {server} موجود بالفعل في قائمة حساباتك.",
"errorCouldNotFetchMessageSource": "تعذر جلب مصدر الرسالة",
"errorCopyingFailed": "فشل النسخ",
"errorFailedToUploadFileTitle": "فشل تحميل الملف: {filename}",
"errorFilesTooLarge": "{num, plural, =1{ الملف هو } other{{num} }} أكبر من حد الخادم البالغ {maxFileUploadSizeMib} MiB ولن يتم تحميلها: \n\n {listMessage}",
"errorFilesTooLargeTitle": "{num, plural, =1{الملف} other{الملفات}} كبيرة جداً",
"errorLoginInvalidInputTitle": "إدخال غير صالح",
"errorLoginFailedTitle": "فشل تسجيل الدخول",
"errorMessageNotSent": "لم يتم إرسال الرسالة",
"errorLoginCouldNotConnect": "فشل الاتصال بالخادم:\n {url}",
"errorLoginCouldNotConnectTitle": "تعذر الاتصال",
"errorMessageDoesNotSeemToExist": "يبدو أن هذه الرسالة غير موجودة.",
"errorQuotationFailed": "فشل الاقتباس",
"errorServerMessage": "قال الخادم:\n\n{message}",
"errorSharingFailed": "فشلت المشاركة",
"errorStarMessageFailedTitle": "فشل تمييز الرسالة بنجمة",
"errorUnstarMessageFailedTitle": "فشل إلغاء تمييز الرسالة",
"successLinkCopied": "تم نسخ الرابط",
"successMessageCopied": "تم نسخ الرسالة",
"composeBoxAttachFilesTooltip": "إرفاق الملفات",
"composeBoxAttachMediaTooltip": "إرفاق صور أو فيديو",
"composeBoxAttachFromCameraTooltip": "التقط صورة",
"composeBoxGenericContentHint": "اكتب رسالة",
"composeBoxDmContentHint": "الرسالة @ {user}",
"composeBoxGroupDmContentHint": "المجموعة \"رسالة\"",
"composeBoxSelfDmContentHint": "قم بتدوين شيء ما",
"composeBoxStreamContentHint": "الرسالة رقم{stream} > {topic}",
"composeBoxSendTooltip": "ارسل",
"composeBoxUnknownStreamName": "(قناة غير معروف)",
"composeBoxTopicHintText": "عنوان",
"composeBoxUploadingFilename": "جارٍ تحميل {filename} ...",
"unknownUserName": "(مستخدم غير معروف)",
"messageListGroupYouAndOthers": "أنت و {others}",
"messageListGroupYouWithYourself": "أنت بمفردك",
"contentValidationErrorTooLong": "يجب ألا يزيد طول الرسالة عن 10000 حرف.",
"contentValidationErrorEmpty": "ليس لديك ما ترسله!",
"contentValidationErrorQuoteAndReplyInProgress": "يرجى الانتظار حتى يكتمل الاقتباس.",
"contentValidationErrorUploadInProgress": "يرجى الانتظار حتى يكتمل التحميل.",
"dialogCancel": "إلغاء",
"dialogContinue": "استمر",
"errorDialogContinue": "حسناً",
"errorDialogTitle": "خطأ",
"lightboxCopyLinkTooltip": "نسخ الرابط",
"loginPageTitle": "تسجيل الدخول",
"loginFormSubmitLabel": "تسجيل الدخول",
"loginMethodDivider": "أو",
"signInWithFoo": "تسجيل الدخول باستخدام {method}",
"loginAddAnAccountPageTitle": "إضافة حساب",
"loginServerUrlInputLabel": "رابط خادم Zulip الخاص بك",
"loginHidePassword": "إخفاء كلمة المرور",
"loginEmailLabel": "عنوان البريد الإلكتروني",
"loginErrorMissingEmail": "الرجاء إدخال بريدك الإلكتروني",
"loginPasswordLabel": "كلمة المرور",
"loginErrorMissingPassword": "الرجاء إدخال كلمة المرور الخاصة بك.",
"loginUsernameLabel": "اسم المستخدم",
"loginErrorMissingUsername": "الرجاء إدخال اسم المستخدم.",
"topicValidationErrorTooLong": "يجب ألا يزيد طول الموضوع عن 60 حرفاً.",
"topicValidationErrorMandatoryButEmpty": "المواضيع مطلوبة في هذه المجموعة.",
"subscribedToNStreams": "مشترك في {num, plural, =0{ لا يوجد قنوات } =1{ 1 فناة } other{{num} قنوات }}",
"errorInvalidResponse": "أرسل الخادم استجابة غير صالحة",
"errorNetworkRequestFailed": "فشل طلب الشبكة",
"errorMalformedResponse": "أعطى الخادم استجابة غير صحيحة؛ حالة HTTP {httpStatus}",
"errorMalformedResponseWithCause": "أعطى الخادم استجابة غير صحيحة؛ حالة HTTP {httpStatus} ؛ {details}",
"errorRequestFailed": "فشل طلب الشبكة: حالة HTTP {httpStatus}",
"errorVideoPlayerFailed": "تعذر تشغيل الفيديو",
"serverUrlValidationErrorEmpty": "الرجاء إدخال عنوان URL.",
"serverUrlValidationErrorInvalidUrl": "أدخل رابط صحيح من فضلك.",
"serverUrlValidationErrorNoUseEmail": "الرجاء إدخال عنوان URL الخاص بالخادم، وليس بريدك الإلكتروني.",
"serverUrlValidationErrorUnsupportedScheme": "يجب أن يبدأ عنوان URL الخاص بالخادم بـ http:\/\/ أو https:\/\/.",
"spoilerDefaultHeaderText": "الإفصاح",
"markAllAsReadLabel": "وضع علامة على جميع الرسائل كمقروءة",
"markAsReadComplete": "تم وضع علامة على {num, plural, =1{ 1 message } other{{num} messages }} كمقروءة.",
"markAsReadInProgress": "وضع علامة على الرسائل كمقروءة...",
"errorMarkAsReadFailedTitle": "فشل في تحديد الرسالة كمقروءة",
"today": "اليوم",
"yesterday": "أمس",
"userRoleOwner": "المالك",
"userRoleAdministrator": "الإداري",
"userRoleModerator": "مشرف",
"userRoleMember": "عضو",
"userRoleGuest": "ضيف",
"userRoleUnknown": "غير معروف",
"recentDmConversationsPageTitle": "الرسائل الشخصية",
"combinedFeedPageTitle": "الملخص",
"notifGroupDmConversationLabel": "{senderFullName} لك و {numOthers, plural, =1{1 آخرين} other{{numOthers} آخرين}}"
}
1 change: 1 addition & 0 deletions assets/l10n/app_en.arb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"@@locale": "en",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm interesting. What's the effect of this / what led you to add it?

"aboutPageTitle": "About Zulip",
"@aboutPageTitle": {
"description": "Title for About Zulip page"
Expand Down
14 changes: 12 additions & 2 deletions lib/widgets/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_gen/gen_l10n/zulip_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

import '../model/localizations.dart';
import '../model/narrow.dart';
Expand Down Expand Up @@ -117,7 +118,12 @@ class _ZulipAppState extends State<ZulipApp> with WidgetsBindingObserver {
final initialAccountId = globalStore.accounts.firstOrNull?.id;
return MaterialApp(
title: 'Zulip',
localizationsDelegates: ZulipLocalizations.localizationsDelegates,
localizationsDelegates: const [
...ZulipLocalizations.localizationsDelegates,
GlobalMaterialLocalizations.delegate,
Comment on lines -120 to +123
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting, yeah, this looks like probably a needed change.

Just to confirm my understanding: what happens if you leave this change out?

Let's put this change in a commit of its own, perhaps at the start of the branch. (And the commit message can have the answer to my question about why it's needed.)

GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
Comment on lines +122 to +125
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: place in logical order:

Suggested change
...ZulipLocalizations.localizationsDelegates,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
...ZulipLocalizations.localizationsDelegates,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,

If our app-specific delegates go first, then the next-most-specific should go next, and so on to the most general delegate going at the end. The flutter/material package depends on flutter/cupertino which depends on flutter/widgets, so that gives the ordering.

],
supportedLocales: ZulipLocalizations.supportedLocales,
theme: themeData,

Expand All @@ -129,7 +135,11 @@ class _ZulipAppState extends State<ZulipApp> with WidgetsBindingObserver {
(_) => widget._declareReady());
}
GlobalLocalizations.zulipLocalizations = ZulipLocalizations.of(context);
return child!;
final locale = Localizations.localeOf(context); // Get locale from context
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: this comment says only information that's equally readable from the code itself, so just leave it out:

Suggested change
final locale = Localizations.localeOf(context); // Get locale from context
final locale = Localizations.localeOf(context);

return Directionality(
textDirection: locale.languageCode == 'ar' ? TextDirection.rtl : TextDirection.ltr,
Comment on lines +139 to +140
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh, is this needed? I would have thought that Flutter would supply this automatically, in MaterialApp (and WidgetsApp which it's built around).

Looking in the Flutter source, it sure does look that way. It's also mentioned in the docs of Localization, which is one of the things WidgetsApp provides.

Suppose you leave this change out; how does the behavior change?

(If we do need a version of this change, it'll be another example of a change that should be its own separate commit.)

child: child!,
);
},

// We use onGenerateInitialRoutes for the real work of specifying the
Expand Down
Loading