Compare commits
	
		
			23 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8e9911962d | ||
|  | 3ebe03b729 | ||
|  | 6bc07d3de3 | ||
|  | fbc6375fde | ||
|  | 0352c40e99 | ||
|  | e5d8166a12 | ||
|  | 07ea625cb2 | ||
|  | 27101f1beb | ||
|  | 1823cf435a | ||
|  | 6a50329a9c | ||
|  | b17e571bc2 | ||
|  | 476e79b8e3 | ||
|  | 19d3317a69 | ||
|  | fe6941e28e | ||
|  | 38600b2792 | ||
|  | b0407ece42 | ||
|  | 9b3d8ee346 | ||
|  | b3d7ad958f | ||
|  | 552d22bec9 | ||
|  | 7c33da45f0 | ||
|  | 9815be2a44 | ||
|  | bebaa6eced | ||
|  | 616f53eea8 | 
| @@ -8,8 +8,17 @@ | ||||
| # /config/locales/*.fr.yml @żelipapą | ||||
| # /config/locales/fr.yml @żelipapą | ||||
|  | ||||
| # Polish | ||||
| /app/javascript/mastodon/locales/pl.json @m4sk1n | ||||
| /app/views/user_mailer/*.pl.html.erb @m4sk1n | ||||
| /app/views/user_mailer/*.pl.text.erb @m4sk1n | ||||
| /config/locales/*.pl.yml @m4sk1n | ||||
| /config/locales/pl.yml @m4sk1n | ||||
|  | ||||
| # French | ||||
| /app/javascript/mastodon/locales/fr.json @aldarone | ||||
| /app/javascript/mastodon/locales/whitelist_fr.json @aldarone | ||||
| /app/views/user_mailer/*.fr.html.erb @aldarone | ||||
| /app/views/user_mailer/*.fr.text.erb @aldarone | ||||
| /config/locales/*.fr.yml @aldarone | ||||
| /config/locales/fr.yml @aldarone | ||||
|   | ||||
| @@ -6,6 +6,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController | ||||
|   before_action :check_enabled_registrations, only: [:new, :create] | ||||
|   before_action :configure_sign_up_params, only: [:create] | ||||
|   before_action :set_sessions, only: [:edit, :update] | ||||
|   before_action :set_instance_presenter, only: [:new, :update] | ||||
|  | ||||
|   def destroy | ||||
|     not_found | ||||
| @@ -39,6 +40,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController | ||||
|  | ||||
|   private | ||||
|  | ||||
|   def set_instance_presenter | ||||
|     @instance_presenter = InstancePresenter.new | ||||
|   end | ||||
|  | ||||
|   def determine_layout | ||||
|     %w(edit update).include?(action_name) ? 'admin' : 'auth' | ||||
|   end | ||||
|   | ||||
| @@ -8,6 +8,7 @@ class Auth::SessionsController < Devise::SessionsController | ||||
|   skip_before_action :require_no_authentication, only: [:create] | ||||
|   skip_before_action :check_suspension, only: [:destroy] | ||||
|   prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create] | ||||
|   before_action :set_instance_presenter, only: [:new] | ||||
|  | ||||
|   def create | ||||
|     super do |resource| | ||||
| @@ -84,6 +85,10 @@ class Auth::SessionsController < Devise::SessionsController | ||||
|  | ||||
|   private | ||||
|  | ||||
|   def set_instance_presenter | ||||
|     @instance_presenter = InstancePresenter.new | ||||
|   end | ||||
|  | ||||
|   def home_paths(resource) | ||||
|     paths = [about_path] | ||||
|     if single_user_mode? && resource.is_a?(User) | ||||
|   | ||||
| @@ -8,15 +8,41 @@ import { useEmoji } from '../../../actions/emojis'; | ||||
| const perLine = 8; | ||||
| const lines   = 2; | ||||
|  | ||||
| const DEFAULTS = [ | ||||
|   '+1', | ||||
|   'grinning', | ||||
|   'kissing_heart', | ||||
|   'heart_eyes', | ||||
|   'laughing', | ||||
|   'stuck_out_tongue_winking_eye', | ||||
|   'sweat_smile', | ||||
|   'joy', | ||||
|   'yum', | ||||
|   'disappointed', | ||||
|   'thinking_face', | ||||
|   'weary', | ||||
|   'sob', | ||||
|   'sunglasses', | ||||
|   'heart', | ||||
|   'ok_hand', | ||||
| ]; | ||||
|  | ||||
| const getFrequentlyUsedEmojis = createSelector([ | ||||
|   state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()), | ||||
| ], emojiCounters => emojiCounters | ||||
| ], emojiCounters => { | ||||
|   let emojis = emojiCounters | ||||
|     .keySeq() | ||||
|     .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b)) | ||||
|     .reverse() | ||||
|     .slice(0, perLine * lines) | ||||
|     .toArray() | ||||
| ); | ||||
|     .toArray(); | ||||
|  | ||||
|   if (emojis.length < DEFAULTS.length) { | ||||
|     emojis = emojis.concat(DEFAULTS.slice(0, DEFAULTS.length - emojis.length)); | ||||
|   } | ||||
|  | ||||
|   return emojis; | ||||
| }); | ||||
|  | ||||
| const getCustomEmojis = createSelector([ | ||||
|   state => state.get('custom_emojis'), | ||||
|   | ||||
| @@ -78,6 +78,7 @@ export default class Status extends ImmutablePureComponent { | ||||
|  | ||||
|   componentWillReceiveProps (nextProps) { | ||||
|     if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) { | ||||
|       this._scrolledIntoView = false; | ||||
|       this.props.dispatch(fetchStatus(nextProps.params.statusId)); | ||||
|     } | ||||
|   } | ||||
| @@ -240,11 +241,17 @@ export default class Status extends ImmutablePureComponent { | ||||
|   } | ||||
|  | ||||
|   componentDidUpdate () { | ||||
|     const { ancestorsIds } = this.props; | ||||
|     if (this._scrolledIntoView) { | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     if (ancestorsIds && ancestorsIds.size > 0) { | ||||
|       const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size]; | ||||
|       element.scrollIntoView(); | ||||
|     const { status, ancestorsIds } = this.props; | ||||
|  | ||||
|     if (status && ancestorsIds && ancestorsIds.size > 0) { | ||||
|       const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1]; | ||||
|  | ||||
|       element.scrollIntoView(true); | ||||
|       this._scrolledIntoView = true; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -186,7 +186,7 @@ export default class UI extends React.Component { | ||||
|  | ||||
|   componentDidMount () { | ||||
|     this.hotkeys.__mousetrap__.stopCallback = (e, element) => { | ||||
|       return !(e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) && ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); | ||||
|       return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName); | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -1,31 +1,31 @@ | ||||
| { | ||||
|   "account.block": "حظر @{name}", | ||||
|   "account.block_domain": "Hide everything from {domain}", | ||||
|   "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", | ||||
|   "account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}", | ||||
|   "account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.", | ||||
|   "account.edit_profile": "تعديل الملف الشخصي", | ||||
|   "account.follow": "تابِع", | ||||
|   "account.followers": "المتابعون", | ||||
|   "account.follows": "يتبع", | ||||
|   "account.follows_you": "يتابعك", | ||||
|   "account.media": "Media", | ||||
|   "account.media": "وسائط", | ||||
|   "account.mention": "أُذكُر @{name}", | ||||
|   "account.mute": "أكتم @{name}", | ||||
|   "account.posts": "المشاركات", | ||||
|   "account.report": "أبلغ عن @{name}", | ||||
|   "account.requested": "في انتظار الموافقة", | ||||
|   "account.share": "Share @{name}'s profile", | ||||
|   "account.share": "مشاركة @{name}'s profile", | ||||
|   "account.unblock": "إلغاء الحظر عن @{name}", | ||||
|   "account.unblock_domain": "Unhide {domain}", | ||||
|   "account.unblock_domain": "فك حظر {domain}", | ||||
|   "account.unfollow": "إلغاء المتابعة", | ||||
|   "account.unmute": "إلغاء الكتم عن @{name}", | ||||
|   "account.view_full_profile": "View full profile", | ||||
|   "account.view_full_profile": "عرض الملف الشخصي كاملا", | ||||
|   "boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة", | ||||
|   "bundle_column_error.body": "Something went wrong while loading this component.", | ||||
|   "bundle_column_error.retry": "Try again", | ||||
|   "bundle_column_error.title": "Network error", | ||||
|   "bundle_modal_error.close": "Close", | ||||
|   "bundle_modal_error.message": "Something went wrong while loading this component.", | ||||
|   "bundle_modal_error.retry": "Try again", | ||||
|   "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", | ||||
|   "bundle_column_error.retry": "إعادة المحاولة", | ||||
|   "bundle_column_error.title": "خطأ في الشبكة", | ||||
|   "bundle_modal_error.close": "أغلق", | ||||
|   "bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", | ||||
|   "bundle_modal_error.retry": "إعادة المحاولة", | ||||
|   "column.blocks": "الحسابات المحجوبة", | ||||
|   "column.community": "الخيط العام المحلي", | ||||
|   "column.favourites": "المفضلة", | ||||
| @@ -33,15 +33,15 @@ | ||||
|   "column.home": "الرئيسية", | ||||
|   "column.mutes": "الحسابات المكتومة", | ||||
|   "column.notifications": "الإشعارات", | ||||
|   "column.pins": "Pinned toot", | ||||
|   "column.pins": "التبويقات المثبتة", | ||||
|   "column.public": "الخيط العام الموحد", | ||||
|   "column_back_button.label": "العودة", | ||||
|   "column_header.hide_settings": "Hide settings", | ||||
|   "column_header.moveLeft_settings": "Move column to the left", | ||||
|   "column_header.moveRight_settings": "Move column to the right", | ||||
|   "column_header.pin": "Pin", | ||||
|   "column_header.show_settings": "Show settings", | ||||
|   "column_header.unpin": "Unpin", | ||||
|   "column_header.hide_settings": "إخفاء الإعدادات", | ||||
|   "column_header.moveLeft_settings": "نقل القائمة إلى اليسار", | ||||
|   "column_header.moveRight_settings": "نقل القائمة إلى اليمين", | ||||
|   "column_header.pin": "تدبيس", | ||||
|   "column_header.show_settings": "عرض الإعدادات", | ||||
|   "column_header.unpin": "فك التدبيس", | ||||
|   "column_subheading.navigation": "التصفح", | ||||
|   "column_subheading.settings": "الإعدادات", | ||||
|   "compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.", | ||||
| @@ -57,16 +57,16 @@ | ||||
|   "confirmations.block.message": "هل أنت متأكد أنك تريد حجب {name} ؟", | ||||
|   "confirmations.delete.confirm": "حذف", | ||||
|   "confirmations.delete.message": "هل أنت متأكد أنك تريد حذف هذا المنشور ؟", | ||||
|   "confirmations.domain_block.confirm": "Hide entire domain", | ||||
|   "confirmations.domain_block.confirm": "إخفاء إسم النطاق كاملا", | ||||
|   "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", | ||||
|   "confirmations.mute.confirm": "أكتم", | ||||
|   "confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟", | ||||
|   "confirmations.unfollow.confirm": "Unfollow", | ||||
|   "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", | ||||
|   "embed.instructions": "Embed this status on your website by copying the code below.", | ||||
|   "embed.preview": "Here is what it will look like:", | ||||
|   "confirmations.unfollow.confirm": "إلغاء المتابعة", | ||||
|   "confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟", | ||||
|   "embed.instructions": "يمكنكم إدماج هذه الحالة على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.", | ||||
|   "embed.preview": "هكذا ما سوف يبدو عليه :", | ||||
|   "emoji_button.activity": "الأنشطة", | ||||
|   "emoji_button.custom": "Custom", | ||||
|   "emoji_button.custom": "مخصص", | ||||
|   "emoji_button.flags": "الأعلام", | ||||
|   "emoji_button.food": "الطعام والشراب", | ||||
|   "emoji_button.label": "أدرج إيموجي", | ||||
| @@ -74,9 +74,9 @@ | ||||
|   "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", | ||||
|   "emoji_button.objects": "أشياء", | ||||
|   "emoji_button.people": "الناس", | ||||
|   "emoji_button.recent": "Frequently used", | ||||
|   "emoji_button.recent": "الشائعة الإستخدام", | ||||
|   "emoji_button.search": "ابحث...", | ||||
|   "emoji_button.search_results": "Search results", | ||||
|   "emoji_button.search_results": "نتائج البحث", | ||||
|   "emoji_button.symbols": "رموز", | ||||
|   "emoji_button.travel": "أماكن و أسفار", | ||||
|   "empty_column.community": "الخط الزمني المحلي فارغ. اكتب شيئا ما للعامة كبداية.", | ||||
| @@ -100,8 +100,8 @@ | ||||
|   "home.column_settings.show_replies": "عرض الردود", | ||||
|   "home.settings": "إعدادات العمود", | ||||
|   "lightbox.close": "إغلاق", | ||||
|   "lightbox.next": "Next", | ||||
|   "lightbox.previous": "Previous", | ||||
|   "lightbox.next": "التالي", | ||||
|   "lightbox.previous": "العودة", | ||||
|   "loading_indicator.label": "تحميل ...", | ||||
|   "media_gallery.toggle_visible": "عرض / إخفاء", | ||||
|   "missing_indicator.label": "تعذر العثور عليه", | ||||
| @@ -113,7 +113,7 @@ | ||||
|   "navigation_bar.info": "معلومات إضافية", | ||||
|   "navigation_bar.logout": "خروج", | ||||
|   "navigation_bar.mutes": "الحسابات المكتومة", | ||||
|   "navigation_bar.pins": "Pinned toots", | ||||
|   "navigation_bar.pins": "التبويقات المثبتة", | ||||
|   "navigation_bar.preferences": "التفضيلات", | ||||
|   "navigation_bar.public_timeline": "الخيط العام الموحد", | ||||
|   "notification.favourite": "{name} أعجب بمنشورك", | ||||
| @@ -126,8 +126,8 @@ | ||||
|   "notifications.column_settings.favourite": "المُفَضَّلة :", | ||||
|   "notifications.column_settings.follow": "متابعُون جُدُد :", | ||||
|   "notifications.column_settings.mention": "الإشارات :", | ||||
|   "notifications.column_settings.push": "Push notifications", | ||||
|   "notifications.column_settings.push_meta": "This device", | ||||
|   "notifications.column_settings.push": "الإخطارات المدفوعة", | ||||
|   "notifications.column_settings.push_meta": "هذا الجهاز", | ||||
|   "notifications.column_settings.reblog": "الترقيّات:", | ||||
|   "notifications.column_settings.show": "إعرِضها في عمود", | ||||
|   "notifications.column_settings.sound": "أصدر صوتا", | ||||
| @@ -165,23 +165,23 @@ | ||||
|   "report.submit": "إرسال", | ||||
|   "report.target": "إبلاغ", | ||||
|   "search.placeholder": "ابحث", | ||||
|   "search_popout.search_format": "Advanced search format", | ||||
|   "search_popout.tips.hashtag": "hashtag", | ||||
|   "search_popout.tips.status": "status", | ||||
|   "search_popout.search_format": "نمط البحث المتقدم", | ||||
|   "search_popout.tips.hashtag": "وسم", | ||||
|   "search_popout.tips.status": "حالة", | ||||
|   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", | ||||
|   "search_popout.tips.user": "user", | ||||
|   "search_popout.tips.user": "مستخدِم", | ||||
|   "search_results.total": "{count, number} {count, plural, one {result} other {results}}", | ||||
|   "standalone.public_title": "A look inside...", | ||||
|   "standalone.public_title": "نظرة على ...", | ||||
|   "status.cannot_reblog": "تعذرت ترقية هذا المنشور", | ||||
|   "status.delete": "إحذف", | ||||
|   "status.embed": "Embed", | ||||
|   "status.embed": "إدماج", | ||||
|   "status.favourite": "أضف إلى المفضلة", | ||||
|   "status.load_more": "حمّل المزيد", | ||||
|   "status.media_hidden": "الصورة مستترة", | ||||
|   "status.mention": "أذكُر @{name}", | ||||
|   "status.mute_conversation": "Mute conversation", | ||||
|   "status.mute_conversation": "كتم المحادثة", | ||||
|   "status.open": "وسع هذه المشاركة", | ||||
|   "status.pin": "Pin on profile", | ||||
|   "status.pin": "تدبيس على الملف الشخصي", | ||||
|   "status.reblog": "رَقِّي", | ||||
|   "status.reblogged_by": "{name} رقى", | ||||
|   "status.reply": "ردّ", | ||||
| @@ -189,11 +189,11 @@ | ||||
|   "status.report": "إبلِغ عن @{name}", | ||||
|   "status.sensitive_toggle": "اضغط للعرض", | ||||
|   "status.sensitive_warning": "محتوى حساس", | ||||
|   "status.share": "Share", | ||||
|   "status.share": "مشاركة", | ||||
|   "status.show_less": "إعرض أقلّ", | ||||
|   "status.show_more": "أظهر المزيد", | ||||
|   "status.unmute_conversation": "Unmute conversation", | ||||
|   "status.unpin": "Unpin from profile", | ||||
|   "status.unmute_conversation": "فك الكتم عن المحادثة", | ||||
|   "status.unpin": "فك التدبيس من الملف الشخصي", | ||||
|   "tabs_bar.compose": "تحرير", | ||||
|   "tabs_bar.federated_timeline": "الموحَّد", | ||||
|   "tabs_bar.home": "الرئيسية", | ||||
| @@ -201,16 +201,16 @@ | ||||
|   "tabs_bar.notifications": "الإخطارات", | ||||
|   "upload_area.title": "إسحب ثم أفلت للرفع", | ||||
|   "upload_button.label": "إضافة وسائط", | ||||
|   "upload_form.description": "Describe for the visually impaired", | ||||
|   "upload_form.description": "وصف للمعاقين بصريا", | ||||
|   "upload_form.undo": "إلغاء", | ||||
|   "upload_progress.label": "يرفع...", | ||||
|   "video.close": "Close video", | ||||
|   "video.exit_fullscreen": "Exit full screen", | ||||
|   "video.expand": "Expand video", | ||||
|   "video.fullscreen": "Full screen", | ||||
|   "video.hide": "Hide video", | ||||
|   "video.mute": "Mute sound", | ||||
|   "video.pause": "Pause", | ||||
|   "video.play": "Play", | ||||
|   "video.unmute": "Unmute sound" | ||||
|   "video.close": "إغلاق الفيديو", | ||||
|   "video.exit_fullscreen": "الخروج من وضع الشاشة المليئة", | ||||
|   "video.expand": "توسيع الفيديو", | ||||
|   "video.fullscreen": "ملء الشاشة", | ||||
|   "video.hide": "إخفاء الفيديو", | ||||
|   "video.mute": "كتم الصوت", | ||||
|   "video.pause": "إيقاف مؤقت", | ||||
|   "video.play": "تشغيل", | ||||
|   "video.unmute": "تشغيل الصوت" | ||||
| } | ||||
|   | ||||
| @@ -66,7 +66,7 @@ | ||||
|   "embed.instructions": "Intégrez ce statut à votre site en copiant ce code ci-dessous.", | ||||
|   "embed.preview": "Il apparaîtra comme cela : ", | ||||
|   "emoji_button.activity": "Activités", | ||||
|   "emoji_button.custom": "Custom", | ||||
|   "emoji_button.custom": "Personnalisés", | ||||
|   "emoji_button.flags": "Drapeaux", | ||||
|   "emoji_button.food": "Boire et manger", | ||||
|   "emoji_button.label": "Insérer un emoji", | ||||
| @@ -74,9 +74,9 @@ | ||||
|   "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", | ||||
|   "emoji_button.objects": "Objets", | ||||
|   "emoji_button.people": "Personnages", | ||||
|   "emoji_button.recent": "Frequently used", | ||||
|   "emoji_button.recent": "Fréquemment utilisés", | ||||
|   "emoji_button.search": "Recherche…", | ||||
|   "emoji_button.search_results": "Search results", | ||||
|   "emoji_button.search_results": "Résultats de la recherche", | ||||
|   "emoji_button.symbols": "Symboles", | ||||
|   "emoji_button.travel": "Lieux et voyages", | ||||
|   "empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir !", | ||||
| @@ -165,11 +165,11 @@ | ||||
|   "report.submit": "Envoyer", | ||||
|   "report.target": "Signalement", | ||||
|   "search.placeholder": "Rechercher", | ||||
|   "search_popout.search_format": "Advanced search format", | ||||
|   "search_popout.search_format": "Recherche avancée", | ||||
|   "search_popout.tips.hashtag": "hashtag", | ||||
|   "search_popout.tips.status": "status", | ||||
|   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", | ||||
|   "search_popout.tips.user": "user", | ||||
|   "search_popout.tips.status": "statuts", | ||||
|   "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les noms d’utilisateur⋅ice et les hashtags correspondants", | ||||
|   "search_popout.tips.user": "utilisateur⋅ice", | ||||
|   "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", | ||||
|   "standalone.public_title": "Jeter un coup d’œil…", | ||||
|   "status.cannot_reblog": "Cette publication ne peut être boostée", | ||||
| @@ -201,7 +201,7 @@ | ||||
|   "tabs_bar.notifications": "Notifications", | ||||
|   "upload_area.title": "Glissez et déposez pour envoyer", | ||||
|   "upload_button.label": "Joindre un média", | ||||
|   "upload_form.description": "Describe for the visually impaired", | ||||
|   "upload_form.description": "Décrire pour les malvoyants", | ||||
|   "upload_form.undo": "Annuler", | ||||
|   "upload_progress.label": "Envoi en cours…", | ||||
|   "video.close": "Fermer la vidéo", | ||||
|   | ||||
| @@ -66,17 +66,17 @@ | ||||
|   "embed.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.", | ||||
|   "embed.preview": "Zo komt het eruit te zien:", | ||||
|   "emoji_button.activity": "Activiteiten", | ||||
|   "emoji_button.custom": "Custom", | ||||
|   "emoji_button.custom": "Lokale emoji’s", | ||||
|   "emoji_button.flags": "Vlaggen", | ||||
|   "emoji_button.food": "Eten en drinken", | ||||
|   "emoji_button.label": "Emoji toevoegen", | ||||
|   "emoji_button.nature": "Natuur", | ||||
|   "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", | ||||
|   "emoji_button.not_found": "Geen emoji’s!! (╯°□°)╯︵ ┻━┻", | ||||
|   "emoji_button.objects": "Voorwerpen", | ||||
|   "emoji_button.people": "Mensen", | ||||
|   "emoji_button.recent": "Frequently used", | ||||
|   "emoji_button.recent": "Vaak gebruikt", | ||||
|   "emoji_button.search": "Zoeken...", | ||||
|   "emoji_button.search_results": "Search results", | ||||
|   "emoji_button.search_results": "Zoekresultaten", | ||||
|   "emoji_button.symbols": "Symbolen", | ||||
|   "emoji_button.travel": "Reizen en plekken", | ||||
|   "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", | ||||
| @@ -165,11 +165,11 @@ | ||||
|   "report.submit": "Verzenden", | ||||
|   "report.target": "Rapporteren van", | ||||
|   "search.placeholder": "Zoeken", | ||||
|   "search_popout.search_format": "Advanced search format", | ||||
|   "search_popout.search_format": "Geavanceerd zoeken", | ||||
|   "search_popout.tips.hashtag": "hashtag", | ||||
|   "search_popout.tips.status": "status", | ||||
|   "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", | ||||
|   "search_popout.tips.user": "user", | ||||
|   "search_popout.tips.status": "toot", | ||||
|   "search_popout.tips.text": "Gebruik gewone tekst om te zoeken op weergavenamen, gebruikersnamen en hashtags.", | ||||
|   "search_popout.tips.user": "gebruiker", | ||||
|   "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", | ||||
|   "standalone.public_title": "Een kijkje binnenin...", | ||||
|   "status.cannot_reblog": "Deze toot kan niet geboost worden", | ||||
| @@ -201,11 +201,11 @@ | ||||
|   "tabs_bar.notifications": "Meldingen", | ||||
|   "upload_area.title": "Hierin slepen om te uploaden", | ||||
|   "upload_button.label": "Media toevoegen", | ||||
|   "upload_form.description": "Describe for the visually impaired", | ||||
|   "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", | ||||
|   "upload_form.undo": "Ongedaan maken", | ||||
|   "upload_progress.label": "Uploaden...", | ||||
|   "video.close": "Close video", | ||||
|   "video.exit_fullscreen": "Exit full screen", | ||||
|   "video.close": "Video sluiten", | ||||
|   "video.exit_fullscreen": "Volledig scherm sluiten", | ||||
|   "video.expand": "Video groter maken", | ||||
|   "video.fullscreen": "Volledig scherm", | ||||
|   "video.hide": "Video verbergen", | ||||
|   | ||||
| @@ -29,8 +29,7 @@ body { | ||||
|     font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", mastodon-font-sans-serif, sans-serif; | ||||
|   } | ||||
|  | ||||
|   &.app-body, | ||||
|   &.error { | ||||
|   &.app-body { | ||||
|     position: fixed; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
| @@ -70,25 +69,34 @@ body { | ||||
|   } | ||||
|  | ||||
|   &.error { | ||||
|     position: absolute; | ||||
|     text-align: center; | ||||
|     color: $ui-primary-color; | ||||
|     padding: 20px; | ||||
|     background: $ui-base-color; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     padding: 0; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|  | ||||
|     .dialog img { | ||||
|       display: block; | ||||
|       max-width: 470px; | ||||
|       width: 100%; | ||||
|       height: auto; | ||||
|       margin-top: -120px; | ||||
|     } | ||||
|     .dialog { | ||||
|       vertical-align: middle; | ||||
|       margin: 20px; | ||||
|  | ||||
|     .dialog h1 { | ||||
|       font-size: 20px; | ||||
|       line-height: 28px; | ||||
|       font-weight: 400; | ||||
|       img { | ||||
|         display: block; | ||||
|         max-width: 470px; | ||||
|         width: 100%; | ||||
|         height: auto; | ||||
|         margin-top: -120px; | ||||
|       } | ||||
|  | ||||
|       h1 { | ||||
|         font-size: 20px; | ||||
|         line-height: 28px; | ||||
|         font-weight: 400; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous' | ||||
|   = render partial: 'og' | ||||
|   = render partial: 'shared/og' | ||||
|  | ||||
| .landing-page | ||||
|   .header-wrapper.compact | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| - content_for :header_tags do | ||||
|   %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) | ||||
|   = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' | ||||
|   = render partial: 'og' | ||||
|   = render partial: 'shared/og' | ||||
|  | ||||
| .landing-page | ||||
|   .header-wrapper | ||||
|   | ||||
| @@ -1,6 +1,9 @@ | ||||
| - content_for :page_title do | ||||
|   = t('auth.register') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = render partial: 'shared/og' | ||||
|  | ||||
| = simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| | ||||
|   = render 'shared/error_messages', object: resource | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,9 @@ | ||||
| - content_for :page_title do | ||||
|   = t('auth.login') | ||||
|  | ||||
| - content_for :header_tags do | ||||
|   = render partial: 'shared/og' | ||||
|  | ||||
| = simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| | ||||
|   = f.input :email, autofocus: true, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') } | ||||
|   = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' } | ||||
|   | ||||
| @@ -1,4 +1,10 @@ | ||||
| - content_for :header_tags do | ||||
|   %link{ href: asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %link{ href: asset_pack_path('features/compose.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %link{ href: asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %link{ href: asset_pack_path('features/notifications.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %link{ href: asset_pack_path('features/community_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %link{ href: asset_pack_path('features/public_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|   %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} | ||||
|   %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) | ||||
|  | ||||
|   | ||||
| @@ -21,14 +21,6 @@ | ||||
|     = stylesheet_pack_tag 'common', media: 'all' | ||||
|     = stylesheet_pack_tag current_theme, media: 'all' | ||||
|     = javascript_pack_tag 'common', integrity: true, crossorigin: 'anonymous' | ||||
|  | ||||
|     %link{ href: asset_pack_path('features/getting_started.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|     %link{ href: asset_pack_path('features/compose.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|     %link{ href: asset_pack_path('features/home_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|     %link{ href: asset_pack_path('features/notifications.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|     %link{ href: asset_pack_path('features/community_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|     %link{ href: asset_pack_path('features/public_timeline.js'), crossorigin: 'anonymous', rel: 'preload', as: 'script' }/ | ||||
|  | ||||
|     = javascript_pack_tag "locale_#{I18n.locale}", integrity: true, crossorigin: 'anonymous' | ||||
|     = csrf_meta_tags | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| - thumbnail = @instance_presenter.thumbnail | ||||
| = opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname) | ||||
| = opengraph 'og:url', about_url | ||||
| = opengraph 'og:url', url_for(only_path: false) | ||||
| = opengraph 'og:type', 'website' | ||||
| = opengraph 'og:title', @instance_presenter.site_title | ||||
| = opengraph 'og:description', strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) | ||||
| @@ -2,6 +2,7 @@ | ||||
| de: | ||||
|   about: | ||||
|     about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!). | ||||
|     about_hashtag_html: Dies sind öffentliche Beiträge, die mit <strong>#%{hashtag}</strong> getaggt wurden. Wenn du ein Konto irgendwo im Fediversum besitzt, kannst du mit ihnen interagieren. | ||||
|     about_this: Über diese Instanz | ||||
|     closed_registrations: Die Registrierung auf dieser Instanz ist momentan geschlossen. Aber du kannst dein Konto auch auf einer anderen Instanz erstellen! Von dort hast du genauso Zugriff auf das Mastodon-Netzwerk. | ||||
|     contact: Kontakt | ||||
| @@ -75,6 +76,7 @@ de: | ||||
|         silenced: Stummgeschaltet | ||||
|         suspended: Gesperrt | ||||
|         title: Moderation | ||||
|       moderation_notes: Moderationsnotizen | ||||
|       most_recent_activity: Letzte Aktivität | ||||
|       most_recent_ip: Letzte IP-Adresse | ||||
|       not_subscribed: Nicht abonniert | ||||
| @@ -108,11 +110,25 @@ de: | ||||
|       unsubscribe: Abbestellen | ||||
|       username: Profilname | ||||
|       web: Web | ||||
|     account_moderation_notes: | ||||
|       account: Moderator*in | ||||
|       created_at: Datum | ||||
|       create: Erstellen | ||||
|       created_msg: Moderationsnotiz erfolgreich erstellt! | ||||
|       delete: Löschen | ||||
|       destroyed_msg: Moderationsnotiz erfolgreich gelöscht! | ||||
|     custom_emojis: | ||||
|       copied_msg: Eine lokale Kopie des Emojis wurde erstellt | ||||
|       copy: Kopieren | ||||
|       copy_failed_msg: Es konnte keine lokale Kopie des Emojis erstellt werden | ||||
|       created_msg: Emoji erstellt! | ||||
|       delete: Löschen | ||||
|       destroyed_msg: Emoji gelöscht! | ||||
|       disable: Deaktivieren | ||||
|       disabled_msg: Das Emoji wurde deaktiviert | ||||
|       emoji: Emoji | ||||
|       enable: Aktivieren | ||||
|       enabled_msg: Das Emoji wurde aktiviert | ||||
|       image_hint: PNG bis 50 kB | ||||
|       new: | ||||
|         title: Eigenes Emoji hinzufügen | ||||
| @@ -423,7 +439,7 @@ de: | ||||
|     reblog: | ||||
|       title: "%{name} hat deinen Beitrag geteilt" | ||||
|   remote_follow: | ||||
|     acct: Dein Profilname@Domain, von dem aus du dieser Person folgen möchtest | ||||
|     acct: Profilname@Domain, von wo aus du dieser Person folgen möchtest | ||||
|     missing_resource: Die erforderliche Weiterleitungs-URL für dein Konto konnte nicht gefunden werden | ||||
|     proceed: Weiter | ||||
|     prompt: 'Du wirst dieser Person folgen:' | ||||
|   | ||||
| @@ -59,7 +59,7 @@ fr: | ||||
|         prompt: Autoriser %{client_name} à utiliser votre compte ? | ||||
|         title: Autorisation requise | ||||
|       show: | ||||
|         title: Copy this authorization code and paste it to the application. | ||||
|         title: Copiez ce code d'autorisation et collez-le dans l'application. | ||||
|     authorized_applications: | ||||
|       buttons: | ||||
|         revoke: Annuler | ||||
| @@ -112,4 +112,4 @@ fr: | ||||
|     scopes: | ||||
|       follow: s’abonner, se désabonner, bloquer et débloquer des comptes | ||||
|       read: lire les données de votre compte | ||||
|       write: poster en tant que vous | ||||
|       write: poster en votre nom | ||||
|   | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -4,6 +4,7 @@ fr: | ||||
|     hints: | ||||
|       defaults: | ||||
|         avatar: Au format PNG, GIF ou JPG. 2Mo maximum. Sera réduit à 120x120px | ||||
|         digest: Envoyé après une longue période d’inactivité et contient un résumé des notifications que vous avez reçues pendant votre absence | ||||
|         display_name: | ||||
|           one: <span class="name-counter">1</span> caractère restant | ||||
|           other: <span class="name-counter">%{count}</span> caractères restants | ||||
| @@ -13,12 +14,13 @@ fr: | ||||
|           one: <span class="note-counter">1</span> caractère restant | ||||
|           other: <span class="note-counter">%{count}</span> caractères restants | ||||
|         setting_noindex: Affecte votre profil public ainsi que vos statuts | ||||
|         setting_theme: Affecte l’apparence de Mastodon quand vous êtes connecté·e depuis n’importe quel appareil. | ||||
|       imports: | ||||
|         data: Un fichier CSV généré par une autre instance de Mastodon | ||||
|       sessions: | ||||
|         otp: Entrez le code d’authentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération. | ||||
|       user: | ||||
|         filtered_languages: Les langues sélectionnées seront retirées de vos fils publics. | ||||
|         filtered_languages: Les langues sélectionnées seront filtrées hors de vos fils publics pour vous | ||||
|     labels: | ||||
|       defaults: | ||||
|         avatar: Image de profil | ||||
| @@ -43,6 +45,7 @@ fr: | ||||
|         setting_delete_modal: Afficher un dialogue de confirmation avant de supprimer un pouet | ||||
|         setting_noindex: Demander aux moteurs de recherche de ne pas indexer vos informations personnelles | ||||
|         setting_system_font_ui: Utiliser la police par défaut du système | ||||
|         setting_theme: Thème du site | ||||
|         setting_unfollow_modal: Afficher un dialogue de confirmation avant de vous désabonner d’un compte | ||||
|         severity: Séverité | ||||
|         type: Type d’import | ||||
|   | ||||
| @@ -4,11 +4,7 @@ const env = process.env.NODE_ENV || 'development'; | ||||
|  | ||||
| module.exports = { | ||||
|   test: /\.js$/, | ||||
|   // include react-intl because transform-react-remove-prop-types needs to apply to it | ||||
|   exclude: { | ||||
|     test: /node_modules/, | ||||
|     exclude: /react-intl[\/\\](?!locale-data)/, | ||||
|   }, | ||||
|   exclude: /node_modules/, | ||||
|   loader: 'babel-loader', | ||||
|   options: { | ||||
|     forceEnv: env, | ||||
|   | ||||
							
								
								
									
										21
									
								
								config/webpack/loaders/babel_external.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								config/webpack/loaders/babel_external.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| const { resolve } = require('path'); | ||||
|  | ||||
| const env = process.env.NODE_ENV || 'development'; | ||||
|  | ||||
| if (env === 'development') { | ||||
|   module.exports = {}; | ||||
| } else { | ||||
|   // babel options to apply only to external libraries, e.g. remove-prop-types | ||||
|   module.exports = { | ||||
|     test: /\.js$/, | ||||
|     include: /node_modules/, | ||||
|     loader: 'babel-loader', | ||||
|     options: { | ||||
|       babelrc: false, | ||||
|       plugins: [ | ||||
|         'transform-react-remove-prop-types', | ||||
|       ], | ||||
|       cacheDirectory: env === 'development' ? false : resolve(__dirname, '..', '..', '..', 'tmp', 'cache', 'babel-loader-external'), | ||||
|     }, | ||||
|   }; | ||||
| } | ||||
| @@ -335,7 +335,10 @@ module Mastodon | ||||
|  | ||||
|       start_arel = table.project(table[:id]).order(table[:id].asc).take(1) | ||||
|       start_arel = yield table, start_arel if block_given? | ||||
|       start_id = exec_query(start_arel.to_sql).to_hash.first['id'].to_i | ||||
|       first_row = exec_query(start_arel.to_sql).to_hash.first | ||||
|       # In case there are no rows but we didn't catch it in the estimated size: | ||||
|       return unless first_row | ||||
|       start_id = first_row['id'].to_i | ||||
|        | ||||
|       say "Migrating #{table_name}.#{column} (~#{total.to_i} rows)" | ||||
|  | ||||
|   | ||||
| @@ -21,7 +21,7 @@ module Mastodon | ||||
|     end | ||||
|  | ||||
|     def flags | ||||
|       'rc1' | ||||
|       'rc2' | ||||
|     end | ||||
|  | ||||
|     def to_a | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 13 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.0 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.5 KiB | 
| @@ -2192,8 +2192,8 @@ elliptic@^6.0.0: | ||||
|     minimalistic-crypto-utils "^1.0.0" | ||||
|  | ||||
| emoji-mart@Gargron/emoji-mart#build: | ||||
|   version "2.1.3" | ||||
|   resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/74721c33954e239b0dba7e24bc7be0b4a650063a" | ||||
|   version "2.1.4" | ||||
|   resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/a5e1afe5ebcf2841e611d20d261b029581cbe051" | ||||
|  | ||||
| emoji-regex@^6.1.0: | ||||
|   version "6.4.3" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user