diff --git a/packages/mobile/fastlane/Fastfile b/packages/mobile/fastlane/Fastfile index 35f213a7991..2565bda1c20 100755 --- a/packages/mobile/fastlane/Fastfile +++ b/packages/mobile/fastlane/Fastfile @@ -115,6 +115,10 @@ platform :ios do end platform :android do + def android_package_name(variant) + variant == 'dev' ? 'com.standardnotes.dev' : 'com.standardnotes' + end + def build_android(variant, versionCode) gradle( task: 'bundle', @@ -132,6 +136,7 @@ platform :android do sh('yarn run android:bundle') build_android(variant, versionCode) upload_to_play_store( + package_name: android_package_name(variant), track: track, json_key_data: (ENV['GOOGLE_PLAY_JSON_KEY_DATA']).to_s, skip_upload_metadata: true, diff --git a/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx b/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx index e2cb93e70f8..3d3621f14e3 100644 --- a/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx +++ b/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx @@ -68,7 +68,7 @@ const ClippedNoteView = ({ if ( await confirmDialog({ text: c('B4.Notes.EditingUI.Confirmation').t`Are you sure you want to discard this clip?`, - confirmButtonText: 'Discard', + confirmButtonText: c('B4.Notes.EditingUI.Action').t`Discard`, confirmButtonStyle: 'danger', }) ) { diff --git a/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx b/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx index edb42e58536..bd22de7a02d 100644 --- a/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx +++ b/packages/web/src/javascripts/Components/FileDragNDropProvider.tsx @@ -7,6 +7,7 @@ import { FileItem, SNNote } from '@standardnotes/snjs' import { useMemo, useState, createContext, ReactNode, useRef, useCallback, useEffect, useContext, memo } from 'react' import Portal from './Portal/Portal' import { ElementIds } from '@/Constants/ElementIDs' +import { FeatureName, getFeatureNameLabel } from '@/Controllers/FeatureName' import { c } from 'ttag' type FileDragTargetCommonData = { @@ -198,7 +199,7 @@ const FileDragNDropProvider = ({ application, children }: Props) => { resetState() if (!application.featuresController.entitledToFiles) { - premiumModal.activate('Files') + premiumModal.activate(getFeatureNameLabel(FeatureName.Files)) return } diff --git a/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx b/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx index cef003abac3..c3f8795b396 100644 --- a/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx +++ b/packages/web/src/javascripts/Components/FileView/FileViewWithoutProtection.tsx @@ -75,7 +75,8 @@ const FileViewWithoutProtection = ({ application, file }: FileViewProps) => { if (target) { addDragTarget(target, { - tooltipText: 'Drop your files to upload and link them to the current file', + tooltipText: c('B7.FilesSubscriptionHelp.Files.Info') + .t`Drop your files to upload and link them to the current file`, async callback(uploadedFile) { await application.linkingController.linkItems(uploadedFile, file) }, diff --git a/packages/web/src/javascripts/Components/Footer/AccountMenuButton.tsx b/packages/web/src/javascripts/Components/Footer/AccountMenuButton.tsx index e3840ea5d84..714fd96669e 100644 --- a/packages/web/src/javascripts/Components/Footer/AccountMenuButton.tsx +++ b/packages/web/src/javascripts/Components/Footer/AccountMenuButton.tsx @@ -22,7 +22,13 @@ const AccountMenuButton = ({ hasError, controller, mainApplicationGroup, onClick const { show: isOpen } = controller useEffect( - () => application.commands.add('open-acc-menu', 'Open account menu', toggleMenu, 'account-circle'), + () => + application.commands.add( + 'open-acc-menu', + c('B2.NavSharedUI.Label').t`Open account menu`, + toggleMenu, + 'account-circle', + ), [application.commands, toggleMenu], ) diff --git a/packages/web/src/javascripts/Components/ImportModal/ImportModalFileItem.tsx b/packages/web/src/javascripts/Components/ImportModal/ImportModalFileItem.tsx index 5bc182c73b7..a5da21056f2 100644 --- a/packages/web/src/javascripts/Components/ImportModal/ImportModalFileItem.tsx +++ b/packages/web/src/javascripts/Components/ImportModal/ImportModalFileItem.tsx @@ -216,12 +216,12 @@ const ImportModalFileItem = ({ className="mr-2 rounded border border-border bg-default px-2 py-1 text-sm" defaultValue={file.service ? file.service : undefined} > - - - - + + + + - + diff --git a/packages/web/src/javascripts/Components/Preferences/Controller/MenuItems.ts b/packages/web/src/javascripts/Components/Preferences/Controller/MenuItems.ts index 1dad8174f83..ac9c6567ddd 100644 --- a/packages/web/src/javascripts/Components/Preferences/Controller/MenuItems.ts +++ b/packages/web/src/javascripts/Components/Preferences/Controller/MenuItems.ts @@ -1,3 +1,4 @@ +import { ListedName } from '@standardnotes/features' import { c } from 'ttag' import { PreferencesMenuItem } from './PreferencesMenuItem' @@ -8,7 +9,7 @@ export const PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [ { id: 'security', label: c('B6.Preferences.Other.Label').t`Security`, icon: 'security', order: 4 }, { id: 'backups', label: c('B6.Preferences.Other.Action').t`Backups`, icon: 'restore', order: 5 }, { id: 'appearance', label: c('B6.Preferences.Other.Label').t`Appearance`, icon: 'themes', order: 6 }, - { id: 'listed', label: 'Listed', icon: 'listed', order: 7 }, + { id: 'listed', label: ListedName, icon: 'listed', order: 7 }, { id: 'shortcuts', label: c('B6.Preferences.Other.Label').t`Shortcuts`, icon: 'keyboard', order: 8 }, { id: 'plugins', label: c('B6.Preferences.Other.Label').t`Plugins`, icon: 'dashboard', order: 8 }, { id: 'accessibility', label: c('B6.Preferences.Other.Label').t`Accessibility`, icon: 'accessibility', order: 9 }, @@ -23,7 +24,7 @@ export const READY_PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [ { id: 'security', label: c('B6.Preferences.Other.Label').t`Security`, icon: 'security', order: 4 }, { id: 'backups', label: c('B6.Preferences.Other.Action').t`Backups`, icon: 'restore', order: 5 }, { id: 'appearance', label: c('B6.Preferences.Other.Label').t`Appearance`, icon: 'themes', order: 6 }, - { id: 'listed', label: 'Listed', icon: 'listed', order: 7 }, + { id: 'listed', label: ListedName, icon: 'listed', order: 7 }, { id: 'plugins', label: c('B6.Preferences.Other.Label').t`Plugins`, icon: 'dashboard', order: 8 }, { id: 'help-feedback', label: c('B6.Preferences.Other.Label').t`Help & feedback`, icon: 'help', order: 11 }, ] diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Appearance/EditorAppearance.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Appearance/EditorAppearance.tsx index 202096ab9cd..aac028d6a02 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Appearance/EditorAppearance.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Appearance/EditorAppearance.tsx @@ -17,6 +17,51 @@ type Props = { application: WebApplication } +function getEditorFontSizeLabel(fontSize: EditorFontSize): string { + switch (fontSize) { + case EditorFontSize.ExtraSmall: + return c('B6.Preferences.Appearance.Label').t`Extra small` + case EditorFontSize.Small: + return c('B6.Preferences.Appearance.Label').t`Small` + case EditorFontSize.Normal: + return c('B6.Preferences.Appearance.Label').t`Normal` + case EditorFontSize.Medium: + return c('B6.Preferences.Appearance.Label').t`Medium` + case EditorFontSize.Large: + return c('B6.Preferences.Appearance.Label').t`Large` + } +} + +function getEditorLineHeightLabel(lineHeight: EditorLineHeight): string { + switch (lineHeight) { + case EditorLineHeight.None: + return c('B6.Preferences.Appearance.Label').t`None` + case EditorLineHeight.Tight: + return c('B6.Preferences.Appearance.Label').t`Tight` + case EditorLineHeight.Snug: + return c('B6.Preferences.Appearance.Label').t`Snug` + case EditorLineHeight.Normal: + return c('B6.Preferences.Appearance.Label').t`Normal` + case EditorLineHeight.Relaxed: + return c('B6.Preferences.Appearance.Label').t`Relaxed` + case EditorLineHeight.Loose: + return c('B6.Preferences.Appearance.Label').t`Loose` + } +} + +function getEditorLineWidthLabel(width: EditorLineWidth): string { + switch (width) { + case EditorLineWidth.Narrow: + return c('B4.Notes.EditorOptions.Label').t`Narrow` + case EditorLineWidth.Wide: + return c('B4.Notes.EditorOptions.Label').t`Wide` + case EditorLineWidth.Dynamic: + return c('B4.Notes.EditorOptions.Label').t`Dynamic` + case EditorLineWidth.FullWidth: + return c('B4.Notes.EditorOptions.Label').t`Full width` + } +} + const EditorDefaults = ({ application }: Props) => { const [lineHeight, setLineHeight] = useLocalPreference(LocalPrefKey.EditorLineHeight) @@ -27,7 +72,7 @@ const EditorDefaults = ({ application }: Props) => { const lineHeightDropdownOptions = useMemo( () => Object.values(EditorLineHeight).map((lineHeight) => ({ - label: lineHeight, + label: getEditorLineHeightLabel(lineHeight), value: lineHeight, })), [], @@ -46,7 +91,7 @@ const EditorDefaults = ({ application }: Props) => { const fontSizeDropdownOptions = useMemo( () => Object.values(EditorFontSize).map((fontSize) => ({ - label: fontSize, + label: getEditorFontSizeLabel(fontSize), value: fontSize, })), [], @@ -118,7 +163,7 @@ const EditorDefaults = ({ application }: Props) => { className="flex w-full min-w-55 items-center justify-between rounded border border-border bg-default px-3.5 py-1.5 text-left text-base text-foreground md:w-fit lg:text-sm" onClick={toggleEditorWidthModal} > - {editorWidth === EditorLineWidth.FullWidth ? 'Full width' : editorWidth} + {getEditorLineWidthLabel(editorWidth)} diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/General/Moments.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/General/Moments.tsx index 7ce686ae4c4..8c2ab0c7333 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/General/Moments.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/General/Moments.tsx @@ -38,7 +38,7 @@ const Moments: FunctionComponent = ({ application }: Props) => { const enable = useCallback(() => { if (!application.featuresController.entitledToFiles) { - premiumModal.activate('Moments') + premiumModal.activate(c('B6.Preferences.General.Title').t`Moments`) return } void application.momentsService.enableMoments() @@ -58,7 +58,7 @@ const Moments: FunctionComponent = ({ application }: Props) => { const takePhoto = useCallback(() => { if (!application.featuresController.entitledToFiles) { - premiumModal.activate('Moments') + premiumModal.activate(c('B6.Preferences.General.Title').t`Moments`) return } diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/General/SmartViews/EditSmartViewModal.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/General/SmartViews/EditSmartViewModal.tsx index 26f1c4a03a2..d7ac0b12035 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/General/SmartViews/EditSmartViewModal.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/General/SmartViews/EditSmartViewModal.tsx @@ -76,7 +76,7 @@ const EditSmartViewModal = ({ controller, platform }: Props) => { mobileSlot: 'left', }, { - label: isSaving ? : 'Save', + label: isSaving ? : c('B6.Preferences.General.Action').t`Save`, onClick: saveSmartView, disabled: isSaving, type: 'primary', diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx index f3dbb3c3d3a..aae5bb74cd1 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Vaults/Vaults/VaultItem.tsx @@ -128,7 +128,12 @@ const VaultItem = ({ vault }: Props) => { )}