mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #13108 from overleaf/mj-figure-modal-translations
[web] Translate figure modal GitOrigin-RevId: b9f2c2e9ba3141dfee15c0af572a022a2b21fd47
This commit is contained in:
parent
f747cb000f
commit
c754eaf5c5
15 changed files with 245 additions and 99 deletions
|
@ -1,4 +1,9 @@
|
||||||
{
|
{
|
||||||
|
"1_2_width": "",
|
||||||
|
"1_4_width": "",
|
||||||
|
"3_4_width": "",
|
||||||
|
"a_custom_size_has_been_used_in_the_latex_code": "",
|
||||||
|
"a_file_with_that_name_already_exists_and_will_be_overriden": "",
|
||||||
"a_more_comprehensive_list_of_keyboard_shortcuts": "",
|
"a_more_comprehensive_list_of_keyboard_shortcuts": "",
|
||||||
"about_to_archive_projects": "",
|
"about_to_archive_projects": "",
|
||||||
"about_to_delete_projects": "",
|
"about_to_delete_projects": "",
|
||||||
|
@ -48,6 +53,7 @@
|
||||||
"archived_projects": "",
|
"archived_projects": "",
|
||||||
"archiving_projects_wont_affect_collaborators": "",
|
"archiving_projects_wont_affect_collaborators": "",
|
||||||
"are_you_affiliated_with_an_institution": "",
|
"are_you_affiliated_with_an_institution": "",
|
||||||
|
"are_you_getting_an_undefined_control_sequence_error": "",
|
||||||
"are_you_still_at": "",
|
"are_you_still_at": "",
|
||||||
"ascending": "",
|
"ascending": "",
|
||||||
"ask_proj_owner_to_upgrade_for_full_history": "",
|
"ask_proj_owner_to_upgrade_for_full_history": "",
|
||||||
|
@ -61,6 +67,7 @@
|
||||||
"autocompile_disabled_reason": "",
|
"autocompile_disabled_reason": "",
|
||||||
"autocomplete": "",
|
"autocomplete": "",
|
||||||
"autocomplete_references": "",
|
"autocomplete_references": "",
|
||||||
|
"back": "",
|
||||||
"back_to_subscription": "",
|
"back_to_subscription": "",
|
||||||
"back_to_your_projects": "",
|
"back_to_your_projects": "",
|
||||||
"beta_program_already_participating": "",
|
"beta_program_already_participating": "",
|
||||||
|
@ -104,6 +111,7 @@
|
||||||
"change_project_owner": "",
|
"change_project_owner": "",
|
||||||
"change_to_group_plan": "",
|
"change_to_group_plan": "",
|
||||||
"change_to_this_plan": "",
|
"change_to_this_plan": "",
|
||||||
|
"changing_the_position_of_your_figure": "",
|
||||||
"chat": "",
|
"chat": "",
|
||||||
"chat_error": "",
|
"chat_error": "",
|
||||||
"checking_dropbox_status": "",
|
"checking_dropbox_status": "",
|
||||||
|
@ -166,7 +174,9 @@
|
||||||
"currently_seeing_only_24_hrs_history": "",
|
"currently_seeing_only_24_hrs_history": "",
|
||||||
"currently_subscribed_to_plan": "",
|
"currently_subscribed_to_plan": "",
|
||||||
"customize_your_group_subscription": "",
|
"customize_your_group_subscription": "",
|
||||||
|
"customizing_figures": "",
|
||||||
"date_and_owner": "",
|
"date_and_owner": "",
|
||||||
|
"dealing_with_errors": "",
|
||||||
"delete": "",
|
"delete": "",
|
||||||
"delete_account": "",
|
"delete_account": "",
|
||||||
"delete_account_confirmation_label": "",
|
"delete_account_confirmation_label": "",
|
||||||
|
@ -174,6 +184,7 @@
|
||||||
"delete_acct_no_existing_pw": "",
|
"delete_acct_no_existing_pw": "",
|
||||||
"delete_and_leave": "",
|
"delete_and_leave": "",
|
||||||
"delete_and_leave_projects": "",
|
"delete_and_leave_projects": "",
|
||||||
|
"delete_figure": "",
|
||||||
"delete_projects": "",
|
"delete_projects": "",
|
||||||
"delete_tag": "",
|
"delete_tag": "",
|
||||||
"delete_your_account": "",
|
"delete_your_account": "",
|
||||||
|
@ -201,6 +212,7 @@
|
||||||
"download": "",
|
"download": "",
|
||||||
"download_pdf": "",
|
"download_pdf": "",
|
||||||
"drag_here": "",
|
"drag_here": "",
|
||||||
|
"drag_here_paste_an_image_or": "",
|
||||||
"dropbox_checking_sync_status": "",
|
"dropbox_checking_sync_status": "",
|
||||||
"dropbox_duplicate_project_names": "",
|
"dropbox_duplicate_project_names": "",
|
||||||
"dropbox_duplicate_project_names_suggestion": "",
|
"dropbox_duplicate_project_names_suggestion": "",
|
||||||
|
@ -225,10 +237,12 @@
|
||||||
"edit_dictionary": "",
|
"edit_dictionary": "",
|
||||||
"edit_dictionary_empty": "",
|
"edit_dictionary_empty": "",
|
||||||
"edit_dictionary_remove": "",
|
"edit_dictionary_remove": "",
|
||||||
|
"edit_figure": "",
|
||||||
"edit_in_source_to_see_your_entire_latex_code": "",
|
"edit_in_source_to_see_your_entire_latex_code": "",
|
||||||
"edit_in_the_left_pane_click_recompile": "",
|
"edit_in_the_left_pane_click_recompile": "",
|
||||||
"edit_tag": "",
|
"edit_tag": "",
|
||||||
"editing": "",
|
"editing": "",
|
||||||
|
"editing_captions": "",
|
||||||
"editor_and_pdf": "&",
|
"editor_and_pdf": "&",
|
||||||
"editor_only_hide_pdf": "",
|
"editor_only_hide_pdf": "",
|
||||||
"editor_theme": "",
|
"editor_theme": "",
|
||||||
|
@ -239,6 +253,7 @@
|
||||||
"emails_and_affiliations_explanation": "",
|
"emails_and_affiliations_explanation": "",
|
||||||
"emails_and_affiliations_title": "",
|
"emails_and_affiliations_title": "",
|
||||||
"end_of_document": "",
|
"end_of_document": "",
|
||||||
|
"enter_image_url": "",
|
||||||
"error": "",
|
"error": "",
|
||||||
"error_performing_request": "",
|
"error_performing_request": "",
|
||||||
"example_project": "",
|
"example_project": "",
|
||||||
|
@ -260,6 +275,7 @@
|
||||||
"file_already_exists_in_this_location": "",
|
"file_already_exists_in_this_location": "",
|
||||||
"file_name": "",
|
"file_name": "",
|
||||||
"file_name_in_this_project": "",
|
"file_name_in_this_project": "",
|
||||||
|
"file_name_in_this_project_figure_modal": "",
|
||||||
"file_outline": "",
|
"file_outline": "",
|
||||||
"files_cannot_include_invalid_characters": "",
|
"files_cannot_include_invalid_characters": "",
|
||||||
"find_out_more": "",
|
"find_out_more": "",
|
||||||
|
@ -270,6 +286,7 @@
|
||||||
"first_name": "",
|
"first_name": "",
|
||||||
"first_x_days_free_after_that_y_per_month": "",
|
"first_x_days_free_after_that_y_per_month": "",
|
||||||
"fold_line": "",
|
"fold_line": "",
|
||||||
|
"folder_location": "",
|
||||||
"following_paths_conflict": "",
|
"following_paths_conflict": "",
|
||||||
"font_family": "",
|
"font_family": "",
|
||||||
"font_size": "",
|
"font_size": "",
|
||||||
|
@ -280,6 +297,7 @@
|
||||||
"from_external_url": "",
|
"from_external_url": "",
|
||||||
"from_provider": "",
|
"from_provider": "",
|
||||||
"full_doc_history": "",
|
"full_doc_history": "",
|
||||||
|
"full_width": "",
|
||||||
"galileo_feedback_button": "",
|
"galileo_feedback_button": "",
|
||||||
"galileo_feedback_detail": "",
|
"galileo_feedback_detail": "",
|
||||||
"galileo_feedback_intro": "",
|
"galileo_feedback_intro": "",
|
||||||
|
@ -403,6 +421,9 @@
|
||||||
"if_error_persists_try_relinking_provider": "",
|
"if_error_persists_try_relinking_provider": "",
|
||||||
"ignore_validation_errors": "",
|
"ignore_validation_errors": "",
|
||||||
"ill_take_it": "",
|
"ill_take_it": "",
|
||||||
|
"image_file": "",
|
||||||
|
"image_url": "",
|
||||||
|
"image_width": "",
|
||||||
"import_from_github": "",
|
"import_from_github": "",
|
||||||
"import_to_sharelatex": "",
|
"import_to_sharelatex": "",
|
||||||
"imported_from_another_project_at_date": "",
|
"imported_from_another_project_at_date": "",
|
||||||
|
@ -414,8 +435,15 @@
|
||||||
"importing_and_merging_changes_in_github": "",
|
"importing_and_merging_changes_in_github": "",
|
||||||
"in_order_to_match_institutional_metadata_2": "",
|
"in_order_to_match_institutional_metadata_2": "",
|
||||||
"in_order_to_match_institutional_metadata_associated": "",
|
"in_order_to_match_institutional_metadata_associated": "",
|
||||||
|
"include_caption": "",
|
||||||
|
"include_label": "",
|
||||||
"increased_compile_timeout": "",
|
"increased_compile_timeout": "",
|
||||||
"inr_discount_offer": "",
|
"inr_discount_offer": "",
|
||||||
|
"insert_figure": "",
|
||||||
|
"insert_from_another_project": "",
|
||||||
|
"insert_from_project_files": "",
|
||||||
|
"insert_from_url": "",
|
||||||
|
"insert_image": "",
|
||||||
"institution": "",
|
"institution": "",
|
||||||
"institution_account": "",
|
"institution_account": "",
|
||||||
"institution_acct_successfully_linked_2": "",
|
"institution_acct_successfully_linked_2": "",
|
||||||
|
@ -437,6 +465,7 @@
|
||||||
"joining": "",
|
"joining": "",
|
||||||
"keep_current_plan": "",
|
"keep_current_plan": "",
|
||||||
"keybindings": "",
|
"keybindings": "",
|
||||||
|
"labels_help_you_to_easily_reference_your_figures": "",
|
||||||
"labs_program_already_participating": "",
|
"labs_program_already_participating": "",
|
||||||
"labs_program_benefits": "<0></0>",
|
"labs_program_benefits": "<0></0>",
|
||||||
"labs_program_not_participating": "",
|
"labs_program_not_participating": "",
|
||||||
|
@ -447,6 +476,7 @@
|
||||||
"last_resort_trouble_shooting_guide": "",
|
"last_resort_trouble_shooting_guide": "",
|
||||||
"last_updated_date_by_x": "",
|
"last_updated_date_by_x": "",
|
||||||
"latex_help_guide": "",
|
"latex_help_guide": "",
|
||||||
|
"latex_places_figures_according_to_a_special_algorithm": "",
|
||||||
"layout": "",
|
"layout": "",
|
||||||
"layout_processing": "",
|
"layout_processing": "",
|
||||||
"learn_more": "",
|
"learn_more": "",
|
||||||
|
@ -553,6 +583,8 @@
|
||||||
"next": "",
|
"next": "",
|
||||||
"next_payment_of_x_collectected_on_y": "",
|
"next_payment_of_x_collectected_on_y": "",
|
||||||
"no_existing_password": "",
|
"no_existing_password": "",
|
||||||
|
"no_folder": "",
|
||||||
|
"no_image_files_found": "",
|
||||||
"no_members": "",
|
"no_members": "",
|
||||||
"no_messages": "",
|
"no_messages": "",
|
||||||
"no_new_commits_in_github": "",
|
"no_new_commits_in_github": "",
|
||||||
|
@ -586,6 +618,7 @@
|
||||||
"organize_projects": "",
|
"organize_projects": "",
|
||||||
"other_logs_and_files": "",
|
"other_logs_and_files": "",
|
||||||
"other_output_files": "",
|
"other_output_files": "",
|
||||||
|
"output_file": "",
|
||||||
"overall_theme": "",
|
"overall_theme": "",
|
||||||
"overleaf": "",
|
"overleaf": "",
|
||||||
"overleaf_history_system": "",
|
"overleaf_history_system": "",
|
||||||
|
@ -650,6 +683,7 @@
|
||||||
"professional": "",
|
"professional": "",
|
||||||
"project": "",
|
"project": "",
|
||||||
"project_approaching_file_limit": "",
|
"project_approaching_file_limit": "",
|
||||||
|
"project_figure_modal": "",
|
||||||
"project_flagged_too_many_compiles": "",
|
"project_flagged_too_many_compiles": "",
|
||||||
"project_has_too_many_files": "",
|
"project_has_too_many_files": "",
|
||||||
"project_last_published_at": "",
|
"project_last_published_at": "",
|
||||||
|
@ -715,6 +749,11 @@
|
||||||
"removing": "",
|
"removing": "",
|
||||||
"rename": "",
|
"rename": "",
|
||||||
"rename_project": "",
|
"rename_project": "",
|
||||||
|
"replace_figure": "",
|
||||||
|
"replace_from_another_project": "",
|
||||||
|
"replace_from_computer": "",
|
||||||
|
"replace_from_project_files": "",
|
||||||
|
"replace_from_url": "",
|
||||||
"repository_name": "",
|
"repository_name": "",
|
||||||
"republish": "",
|
"republish": "",
|
||||||
"resend": "",
|
"resend": "",
|
||||||
|
@ -765,10 +804,13 @@
|
||||||
"select_all": "",
|
"select_all": "",
|
||||||
"select_all_projects": "",
|
"select_all_projects": "",
|
||||||
"select_an_output_file": "",
|
"select_an_output_file": "",
|
||||||
|
"select_folder_from_project": "",
|
||||||
"select_from_output_files": "",
|
"select_from_output_files": "",
|
||||||
|
"select_from_project_files": "",
|
||||||
"select_from_source_files": "",
|
"select_from_source_files": "",
|
||||||
"select_from_your_computer": "",
|
"select_from_your_computer": "",
|
||||||
"select_github_repository": "",
|
"select_github_repository": "",
|
||||||
|
"select_image_from_project_files": "",
|
||||||
"select_project": "",
|
"select_project": "",
|
||||||
"select_projects": "",
|
"select_projects": "",
|
||||||
"select_tag": "",
|
"select_tag": "",
|
||||||
|
@ -865,8 +907,10 @@
|
||||||
"thanks_for_subscribing_you_help_sl": "",
|
"thanks_for_subscribing_you_help_sl": "",
|
||||||
"thanks_settings_updated": "",
|
"thanks_settings_updated": "",
|
||||||
"the_following_files_already_exist_in_this_project": "",
|
"the_following_files_already_exist_in_this_project": "",
|
||||||
|
"the_width_you_choose_here_is_based_on_the_width_of_the_text_in_your_document": "",
|
||||||
"then_x_price_per_month": "",
|
"then_x_price_per_month": "",
|
||||||
"then_x_price_per_year": "",
|
"then_x_price_per_year": "",
|
||||||
|
"there_are_lots_of_options_to_edit_and_customize_your_figures": "",
|
||||||
"this_action_cannot_be_undone": "",
|
"this_action_cannot_be_undone": "",
|
||||||
"this_address_will_be_shown_on_the_invoice": "",
|
"this_address_will_be_shown_on_the_invoice": "",
|
||||||
"this_field_is_required": "",
|
"this_field_is_required": "",
|
||||||
|
@ -874,6 +918,7 @@
|
||||||
"this_project_is_public": "",
|
"this_project_is_public": "",
|
||||||
"this_project_is_public_read_only": "",
|
"this_project_is_public_read_only": "",
|
||||||
"this_project_will_appear_in_your_dropbox_folder_at": "",
|
"this_project_will_appear_in_your_dropbox_folder_at": "",
|
||||||
|
"this_tool_helps_you_insert_figures": "",
|
||||||
"timedout": "",
|
"timedout": "",
|
||||||
"tip": "",
|
"tip": "",
|
||||||
"title": "",
|
"title": "",
|
||||||
|
@ -933,8 +978,10 @@
|
||||||
"unconfirmed": "",
|
"unconfirmed": "",
|
||||||
"undelete": "",
|
"undelete": "",
|
||||||
"undeleting": "",
|
"undeleting": "",
|
||||||
|
"understanding_labels": "",
|
||||||
"unfold_line": "",
|
"unfold_line": "",
|
||||||
"university": "",
|
"university": "",
|
||||||
|
"unknown": "",
|
||||||
"unlimited_collabs": "",
|
"unlimited_collabs": "",
|
||||||
"unlimited_projects": "",
|
"unlimited_projects": "",
|
||||||
"unlink": "",
|
"unlink": "",
|
||||||
|
@ -962,11 +1009,13 @@
|
||||||
"upgrade_now": "",
|
"upgrade_now": "",
|
||||||
"upgrade_to_get_feature": "",
|
"upgrade_to_get_feature": "",
|
||||||
"upload": "",
|
"upload": "",
|
||||||
|
"upload_from_computer": "",
|
||||||
"upload_project": "",
|
"upload_project": "",
|
||||||
"upload_zipped_project": "",
|
"upload_zipped_project": "",
|
||||||
"url_to_fetch_the_file_from": "",
|
"url_to_fetch_the_file_from": "",
|
||||||
"use_a_different_password": "",
|
"use_a_different_password": "",
|
||||||
"use_your_own_machine": "",
|
"use_your_own_machine": "",
|
||||||
|
"used_when_referring_to_the_figure_elsewhere_in_the_document": "",
|
||||||
"user_deletion_error": "",
|
"user_deletion_error": "",
|
||||||
"user_deletion_password_reset_tip": "",
|
"user_deletion_password_reset_tip": "",
|
||||||
"user_sessions": "",
|
"user_sessions": "",
|
||||||
|
@ -987,6 +1036,7 @@
|
||||||
"wed_love_you_to_stay": "",
|
"wed_love_you_to_stay": "",
|
||||||
"welcome_to_sl": "",
|
"welcome_to_sl": "",
|
||||||
"welcome_to_your_first_project": "",
|
"welcome_to_your_first_project": "",
|
||||||
|
"when_you_tick_the_include_caption_box": "",
|
||||||
"wide": "",
|
"wide": "",
|
||||||
"with_premium_subscription_you_also_get": "",
|
"with_premium_subscription_you_also_get": "",
|
||||||
"word_count": "",
|
"word_count": "",
|
||||||
|
|
|
@ -5,12 +5,14 @@ import {
|
||||||
} from './figure-modal-context'
|
} from './figure-modal-context'
|
||||||
import Icon from '../../../../shared/components/icon'
|
import Icon from '../../../../shared/components/icon'
|
||||||
import { FC } from 'react'
|
import { FC } from 'react'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FigureModalFooter: FC<{
|
export const FigureModalFooter: FC<{
|
||||||
onInsert: () => void
|
onInsert: () => void
|
||||||
onCancel: () => void
|
onCancel: () => void
|
||||||
onDelete: () => void
|
onDelete: () => void
|
||||||
}> = ({ onInsert, onCancel, onDelete }) => {
|
}> = ({ onInsert, onCancel, onDelete }) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
return (
|
return (
|
||||||
<div className="figure-modal-footer">
|
<div className="figure-modal-footer">
|
||||||
<div className="figure-modal-help-buttons">
|
<div className="figure-modal-help-buttons">
|
||||||
|
@ -23,7 +25,7 @@ export const FigureModalFooter: FC<{
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onCancel}
|
onClick={onCancel}
|
||||||
>
|
>
|
||||||
Cancel
|
{t('cancel')}
|
||||||
</Button>
|
</Button>
|
||||||
<FigureModalAction onInsert={onInsert} onDelete={onDelete} />
|
<FigureModalAction onInsert={onInsert} onDelete={onDelete} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,6 +34,7 @@ export const FigureModalFooter: FC<{
|
||||||
}
|
}
|
||||||
|
|
||||||
const HelpToggle = () => {
|
const HelpToggle = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { helpShown, dispatch } = useFigureModalContext()
|
const { helpShown, dispatch } = useFigureModalContext()
|
||||||
if (helpShown) {
|
if (helpShown) {
|
||||||
return (
|
return (
|
||||||
|
@ -41,7 +44,7 @@ const HelpToggle = () => {
|
||||||
onClick={() => dispatch({ helpShown: false })}
|
onClick={() => dispatch({ helpShown: false })}
|
||||||
>
|
>
|
||||||
<Icon type="arrow-left" fw />
|
<Icon type="arrow-left" fw />
|
||||||
Back
|
{t('back')}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -52,7 +55,7 @@ const HelpToggle = () => {
|
||||||
onClick={() => dispatch({ helpShown: true })}
|
onClick={() => dispatch({ helpShown: true })}
|
||||||
>
|
>
|
||||||
<Icon type="question-circle" fw />
|
<Icon type="question-circle" fw />
|
||||||
Help
|
{t('help')}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -61,6 +64,7 @@ const FigureModalAction: FC<{
|
||||||
onInsert: () => void
|
onInsert: () => void
|
||||||
onDelete: () => void
|
onDelete: () => void
|
||||||
}> = ({ onInsert, onDelete }) => {
|
}> = ({ onInsert, onDelete }) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { helpShown, getPath, source, sourcePickerShown } =
|
const { helpShown, getPath, source, sourcePickerShown } =
|
||||||
useFigureModalContext()
|
useFigureModalContext()
|
||||||
|
|
||||||
|
@ -76,7 +80,7 @@ const FigureModalAction: FC<{
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onDelete}
|
onClick={onDelete}
|
||||||
>
|
>
|
||||||
Delete figure
|
{t('delete_figure')}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -89,7 +93,7 @@ const FigureModalAction: FC<{
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onInsert}
|
onClick={onInsert}
|
||||||
>
|
>
|
||||||
Done
|
{t('done')}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -102,7 +106,7 @@ const FigureModalAction: FC<{
|
||||||
disabled={getPath === undefined}
|
disabled={getPath === undefined}
|
||||||
onClick={onInsert}
|
onClick={onInsert}
|
||||||
>
|
>
|
||||||
Insert figure
|
{t('insert_figure')}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,63 +1,68 @@
|
||||||
import { FC } from 'react'
|
import { FC } from 'react'
|
||||||
|
import { Trans, useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
const LearnWikiLink: FC<{ article: string }> = ({ article, children }) => {
|
const LearnWikiLink: FC<{ article: string }> = ({ article, children }) => {
|
||||||
return <a href={`/learn/latex/${article}`}>{children}</a>
|
return <a href={`/learn/latex/${article}`}>{children}</a>
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FigureModalHelp = () => {
|
export const FigureModalHelp = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
This tool helps you insert figures into your project without needing to
|
<Trans i18nKey="this_tool_helps_you_insert_figures" />
|
||||||
write the LaTeX code. The following information explains more about the
|
</p>
|
||||||
options in the tool and how to further customize your figures.
|
<b>{t('editing_captions')}</b>
|
||||||
|
<p>
|
||||||
|
<Trans i18nKey="when_you_tick_the_include_caption_box" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b>Editing captions</b>
|
<b>{t('understanding_labels')}</b>
|
||||||
<p>
|
<p>
|
||||||
When you tick the box “Include caption” the image will be inserted into
|
<Trans
|
||||||
your document with a placeholder caption. To edit it, you simply select
|
i18nKey="labels_help_you_to_easily_reference_your_figures"
|
||||||
the placeholder text and type to replace it with your own.{' '}
|
components={[
|
||||||
|
// eslint-disable-next-line react/jsx-key
|
||||||
|
<code />,
|
||||||
|
// eslint-disable-next-line react/jsx-key
|
||||||
|
<LearnWikiLink article="Inserting_Images#Labels_and_cross-references" />,
|
||||||
|
]}
|
||||||
|
/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b>Understanding labels</b>
|
<b>{t('customizing_figures')}</b>
|
||||||
<p>
|
<p>
|
||||||
Labels help you to easily reference your figures throughout your
|
<Trans
|
||||||
document. To reference a figure within the text, reference the label
|
i18nKey="there_are_lots_of_options_to_edit_and_customize_your_figures"
|
||||||
using the <code>\ref{...}</code> command. This makes it easy
|
components={[
|
||||||
to reference figures without needing to manually remember the figure
|
// eslint-disable-next-line react/jsx-key
|
||||||
numbering.{' '}
|
<LearnWikiLink article="Inserting_Images" />,
|
||||||
<LearnWikiLink article="Inserting_Images#Labels_and_cross-references">
|
]}
|
||||||
Learn more
|
/>
|
||||||
</LearnWikiLink>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b>Customizing figures</b>
|
<b>{t('changing_the_position_of_your_figure')}</b>
|
||||||
<p>
|
<p>
|
||||||
There are lots of options to edit and customize your figures, such as
|
<Trans
|
||||||
wrapping text around the figure, rotating the image, or including
|
i18nKey="latex_places_figures_according_to_a_special_algorithm"
|
||||||
multiple images in a single figure. You’ll need to edit the LaTeX code
|
components={[
|
||||||
to do this.{' '}
|
// eslint-disable-next-line react/jsx-key
|
||||||
<LearnWikiLink article="Inserting_Images">Find out how</LearnWikiLink>
|
<LearnWikiLink article="Positioning_images_and_tables" />,
|
||||||
|
]}
|
||||||
|
/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<b>Changing the position of your figure</b>
|
<b>{t('dealing_with_errors')}</b>
|
||||||
<p>
|
<p>
|
||||||
LaTeX places figures according to a special algorithm. You can use
|
<Trans
|
||||||
something called ‘placement parameters’ to influence the positioning of
|
i18nKey="are_you_getting_an_undefined_control_sequence_error"
|
||||||
the figure.{' '}
|
components={[
|
||||||
<LearnWikiLink article="Positioning_images_and_tables">
|
// eslint-disable-next-line react/jsx-key
|
||||||
Find out how
|
<code />,
|
||||||
</LearnWikiLink>
|
// eslint-disable-next-line react/jsx-key
|
||||||
</p>
|
<LearnWikiLink article="Inserting_Images" />,
|
||||||
|
]}
|
||||||
<b>Dealing with errors</b>
|
/>
|
||||||
<p>
|
|
||||||
Are you getting an Undefined Control Sequence error? If you are, make
|
|
||||||
sure you’ve loaded the graphicx package—
|
|
||||||
<code>\usepackage{graphicx}</code>—in the preamble
|
|
||||||
(first section of code) in your document.{' '}
|
|
||||||
<LearnWikiLink article="Inserting_Images">Learn more</LearnWikiLink>
|
|
||||||
</p>
|
</p>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,8 +6,10 @@ import {
|
||||||
useFigureModalExistingFigureContext,
|
useFigureModalExistingFigureContext,
|
||||||
} from './figure-modal-context'
|
} from './figure-modal-context'
|
||||||
import { Switcher, SwitcherItem } from '../../../../shared/components/switcher'
|
import { Switcher, SwitcherItem } from '../../../../shared/components/switcher'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FigureModalFigureOptions: FC = () => {
|
export const FigureModalFigureOptions: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { includeCaption, includeLabel, dispatch, width } =
|
const { includeCaption, includeLabel, dispatch, width } =
|
||||||
useFigureModalContext()
|
useFigureModalContext()
|
||||||
|
|
||||||
|
@ -22,7 +24,7 @@ export const FigureModalFigureOptions: FC = () => {
|
||||||
onChange={event => dispatch({ includeCaption: event.target.checked })}
|
onChange={event => dispatch({ includeCaption: event.target.checked })}
|
||||||
/>
|
/>
|
||||||
<label className="figure-modal-label" htmlFor="figure-modal-caption">
|
<label className="figure-modal-label" htmlFor="figure-modal-caption">
|
||||||
Include caption
|
{t('include_caption')}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="figure-modal-checkbox-input">
|
<div className="figure-modal-checkbox-input">
|
||||||
|
@ -33,20 +35,20 @@ export const FigureModalFigureOptions: FC = () => {
|
||||||
onChange={event => dispatch({ includeLabel: event.target.checked })}
|
onChange={event => dispatch({ includeLabel: event.target.checked })}
|
||||||
/>
|
/>
|
||||||
<label htmlFor="figure-modal-label" className="mb-0 figure-modal-label">
|
<label htmlFor="figure-modal-label" className="mb-0 figure-modal-label">
|
||||||
Include label
|
{t('include_label')}
|
||||||
<br />
|
<br />
|
||||||
<span className="text-muted text-small figure-modal-label-description">
|
<span className="text-muted text-small figure-modal-label-description">
|
||||||
Used when referring to the figure elsewhere in the document
|
{t('used_when_referring_to_the_figure_elsewhere_in_the_document')}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="figure-modal-switcher-input">
|
<div className="figure-modal-switcher-input">
|
||||||
<div>
|
<div>
|
||||||
Image width{' '}
|
{t('image_width')}{' '}
|
||||||
{hasComplexGraphicsArgument ? (
|
{hasComplexGraphicsArgument ? (
|
||||||
<Tooltip
|
<Tooltip
|
||||||
id="figure-modal-image-width-warning-tooltip"
|
id="figure-modal-image-width-warning-tooltip"
|
||||||
description="A custom size has been used in the LaTeX code."
|
description={t('a_custom_size_has_been_used_in_the_latex_code')}
|
||||||
overlayProps={{ delay: 0, placement: 'top' }}
|
overlayProps={{ delay: 0, placement: 'top' }}
|
||||||
>
|
>
|
||||||
<Icon type="exclamation-triangle" fw />
|
<Icon type="exclamation-triangle" fw />
|
||||||
|
@ -54,7 +56,9 @@ export const FigureModalFigureOptions: FC = () => {
|
||||||
) : (
|
) : (
|
||||||
<Tooltip
|
<Tooltip
|
||||||
id="figure-modal-image-width-tooltip"
|
id="figure-modal-image-width-tooltip"
|
||||||
description="The width you choose here is based on the width of the text in your document. Alternatively, you can customize the image size directly in the LaTeX code."
|
description={t(
|
||||||
|
'the_width_you_choose_here_is_based_on_the_width_of_the_text_in_your_document'
|
||||||
|
)}
|
||||||
overlayProps={{ delay: 0, placement: 'bottom' }}
|
overlayProps={{ delay: 0, placement: 'bottom' }}
|
||||||
>
|
>
|
||||||
<Icon type="question-circle" fw />
|
<Icon type="question-circle" fw />
|
||||||
|
@ -68,10 +72,10 @@ export const FigureModalFigureOptions: FC = () => {
|
||||||
defaultValue={width === 1 ? '1.0' : width.toString()}
|
defaultValue={width === 1 ? '1.0' : width.toString()}
|
||||||
disabled={hasComplexGraphicsArgument}
|
disabled={hasComplexGraphicsArgument}
|
||||||
>
|
>
|
||||||
<SwitcherItem value="0.25" label="¼ width" />
|
<SwitcherItem value="0.25" label={t('1_4_width')} />
|
||||||
<SwitcherItem value="0.5" label="½ width" />
|
<SwitcherItem value="0.5" label={t('1_2_width')} />
|
||||||
<SwitcherItem value="0.75" label="¾ width" />
|
<SwitcherItem value="0.75" label={t('3_4_width')} />
|
||||||
<SwitcherItem value="1.0" label="Full width" />
|
<SwitcherItem value="1.0" label={t('full_width')} />
|
||||||
</Switcher>
|
</Switcher>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,31 +5,33 @@ import {
|
||||||
} from './figure-modal-context'
|
} from './figure-modal-context'
|
||||||
import Icon from '../../../../shared/components/icon'
|
import Icon from '../../../../shared/components/icon'
|
||||||
import { Button } from 'react-bootstrap'
|
import { Button } from 'react-bootstrap'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FigureModalSourcePicker: FC = () => {
|
export const FigureModalSourcePicker: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
return (
|
return (
|
||||||
<div className="figure-modal-source-selector">
|
<div className="figure-modal-source-selector">
|
||||||
<div className="figure-modal-source-button-row">
|
<div className="figure-modal-source-button-row">
|
||||||
<FigureModalSourceButton
|
<FigureModalSourceButton
|
||||||
type={FigureModalSource.FILE_UPLOAD}
|
type={FigureModalSource.FILE_UPLOAD}
|
||||||
title="Replace from computer"
|
title={t('replace_from_computer')}
|
||||||
icon="upload"
|
icon="upload"
|
||||||
/>
|
/>
|
||||||
<FigureModalSourceButton
|
<FigureModalSourceButton
|
||||||
type={FigureModalSource.OTHER_PROJECT}
|
type={FigureModalSource.OTHER_PROJECT}
|
||||||
title="Replace from another project"
|
title={t('replace_from_another_project')}
|
||||||
icon="folder-open"
|
icon="folder-open"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="figure-modal-source-button-row">
|
<div className="figure-modal-source-button-row">
|
||||||
<FigureModalSourceButton
|
<FigureModalSourceButton
|
||||||
type={FigureModalSource.FILE_TREE}
|
type={FigureModalSource.FILE_TREE}
|
||||||
title="Replace from project files"
|
title={t('replace_from_project_files')}
|
||||||
icon="archive"
|
icon="archive"
|
||||||
/>
|
/>
|
||||||
<FigureModalSourceButton
|
<FigureModalSourceButton
|
||||||
type={FigureModalSource.FROM_URL}
|
type={FigureModalSource.FROM_URL}
|
||||||
title="Replace from URL"
|
title={t('replace_from_url')}
|
||||||
icon="globe"
|
icon="globe"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,23 +18,7 @@ import {
|
||||||
editFigureDataEffect,
|
editFigureDataEffect,
|
||||||
} from '../../extensions/figure-modal'
|
} from '../../extensions/figure-modal'
|
||||||
import { ensureEmptyLine } from '../../extensions/toolbar/commands'
|
import { ensureEmptyLine } from '../../extensions/toolbar/commands'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
const getTitle = (state: FigureModalSource) => {
|
|
||||||
switch (state) {
|
|
||||||
case FigureModalSource.FILE_UPLOAD:
|
|
||||||
return 'Upload from computer'
|
|
||||||
case FigureModalSource.FILE_TREE:
|
|
||||||
return 'Insert from project files'
|
|
||||||
case FigureModalSource.FROM_URL:
|
|
||||||
return 'Insert from URL'
|
|
||||||
case FigureModalSource.OTHER_PROJECT:
|
|
||||||
return 'Insert from another project'
|
|
||||||
case FigureModalSource.EDIT_FIGURE:
|
|
||||||
return 'Edit figure'
|
|
||||||
default:
|
|
||||||
return 'Insert image'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const FigureModal = memo(function FigureModal() {
|
export const FigureModal = memo(function FigureModal() {
|
||||||
return (
|
return (
|
||||||
|
@ -45,6 +29,28 @@ export const FigureModal = memo(function FigureModal() {
|
||||||
})
|
})
|
||||||
|
|
||||||
const FigureModalContent = () => {
|
const FigureModalContent = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
|
|
||||||
|
const getTitle = useCallback(
|
||||||
|
(state: FigureModalSource) => {
|
||||||
|
switch (state) {
|
||||||
|
case FigureModalSource.FILE_UPLOAD:
|
||||||
|
return t('upload_from_computer')
|
||||||
|
case FigureModalSource.FILE_TREE:
|
||||||
|
return t('insert_from_project_files')
|
||||||
|
case FigureModalSource.FROM_URL:
|
||||||
|
return t('insert_from_url')
|
||||||
|
case FigureModalSource.OTHER_PROJECT:
|
||||||
|
return t('insert_from_another_project')
|
||||||
|
case FigureModalSource.EDIT_FIGURE:
|
||||||
|
return t('edit_figure')
|
||||||
|
default:
|
||||||
|
return t('insert_image')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[t]
|
||||||
|
)
|
||||||
|
|
||||||
const {
|
const {
|
||||||
source,
|
source,
|
||||||
dispatch,
|
dispatch,
|
||||||
|
@ -232,9 +238,9 @@ const FigureModalContent = () => {
|
||||||
<Modal.Header closeButton>
|
<Modal.Header closeButton>
|
||||||
<Modal.Title>
|
<Modal.Title>
|
||||||
{helpShown
|
{helpShown
|
||||||
? 'Help'
|
? t('help')
|
||||||
: sourcePickerShown
|
: sourcePickerShown
|
||||||
? 'Replace figure'
|
? t('replace_figure')
|
||||||
: getTitle(source)}{' '}
|
: getTitle(source)}{' '}
|
||||||
<SplitTestBadge
|
<SplitTestBadge
|
||||||
splitTestName="figure-modal"
|
splitTestName="figure-modal"
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
import { File, FileOrDirectory } from '../../utils/file'
|
import { File, FileOrDirectory } from '../../utils/file'
|
||||||
import useScopeValue from '../../../../shared/hooks/use-scope-value'
|
import useScopeValue from '../../../../shared/hooks/use-scope-value'
|
||||||
import { Alert } from 'react-bootstrap'
|
import { Alert } from 'react-bootstrap'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
type FileNameInputProps = Omit<
|
type FileNameInputProps = Omit<
|
||||||
DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,
|
DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,
|
||||||
|
@ -54,6 +55,7 @@ export const FileNameInput = ({
|
||||||
targetFolder,
|
targetFolder,
|
||||||
...props
|
...props
|
||||||
}: FileNameInputProps) => {
|
}: FileNameInputProps) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const [overlap, setOverlap] = useState<boolean>(false)
|
const [overlap, setOverlap] = useState<boolean>(false)
|
||||||
const [rootFolder] = useScopeValue<FileOrDirectory>('rootFolder')
|
const [rootFolder] = useScopeValue<FileOrDirectory>('rootFolder')
|
||||||
const { value } = props
|
const { value } = props
|
||||||
|
@ -83,7 +85,7 @@ export const FileNameInput = ({
|
||||||
<input {...props} type="text" onFocus={onFocus} />
|
<input {...props} type="text" onFocus={onFocus} />
|
||||||
{overlap && (
|
{overlap && (
|
||||||
<Alert bsStyle="warning" className="mt-1 mb-0">
|
<Alert bsStyle="warning" className="mt-1 mb-0">
|
||||||
A file with that name already exists. That file will be overwritten.
|
{t('a_file_with_that_name_already_exists_and_will_be_overriden')}
|
||||||
</Alert>
|
</Alert>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { FileNameInput } from './file-name-input'
|
||||||
import { File } from '../../utils/file'
|
import { File } from '../../utils/file'
|
||||||
import { Select } from '../../../../shared/components/select'
|
import { Select } from '../../../../shared/components/select'
|
||||||
import { useCurrentProjectFolders } from '../../hooks/useCurrentProjectFolders'
|
import { useCurrentProjectFolders } from '../../hooks/useCurrentProjectFolders'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FileRelocator = ({
|
export const FileRelocator = ({
|
||||||
name,
|
name,
|
||||||
|
@ -23,6 +24,7 @@ export const FileRelocator = ({
|
||||||
setFolder: (folder: File) => void
|
setFolder: (folder: File) => void
|
||||||
setNameDirty: (nameDirty: boolean) => void
|
setNameDirty: (nameDirty: boolean) => void
|
||||||
}) => {
|
}) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const [folders, rootFile] = useCurrentProjectFolders()
|
const [folders, rootFile] = useCurrentProjectFolders()
|
||||||
|
|
||||||
const nameChanged = useCallback(
|
const nameChanged = useCallback(
|
||||||
|
@ -48,7 +50,7 @@ export const FileRelocator = ({
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<label htmlFor="figure-modal-relocated-file-name">
|
<label htmlFor="figure-modal-relocated-file-name">
|
||||||
File name in this project
|
{t('file_name_in_this_project_figure_modal')}
|
||||||
</label>
|
</label>
|
||||||
<FileNameInput
|
<FileNameInput
|
||||||
id="figure-modal-relocated-file-name"
|
id="figure-modal-relocated-file-name"
|
||||||
|
@ -64,17 +66,17 @@ export const FileRelocator = ({
|
||||||
items={folders || []}
|
items={folders || []}
|
||||||
itemToString={item => {
|
itemToString={item => {
|
||||||
if (item?.path === '' && item?.name === 'rootFolder') {
|
if (item?.path === '' && item?.name === 'rootFolder') {
|
||||||
return 'No folder'
|
return t('no_folder')
|
||||||
}
|
}
|
||||||
if (item) {
|
if (item) {
|
||||||
return `${item.path}${item.name}`
|
return `${item.path}${item.name}`
|
||||||
}
|
}
|
||||||
return 'No folder'
|
return t('no_folder')
|
||||||
}}
|
}}
|
||||||
itemToSubtitle={item => item?.path ?? ''}
|
itemToSubtitle={item => item?.path ?? ''}
|
||||||
itemToKey={item => item.id}
|
itemToKey={item => item.id}
|
||||||
defaultText="Select folder from project"
|
defaultText={t('select_folder_from_project')}
|
||||||
label="Folder location"
|
label={t('folder_location')}
|
||||||
optionalLabel
|
optionalLabel
|
||||||
onSelectedItemChanged={selectedFolderChanged}
|
onSelectedItemChanged={selectedFolderChanged}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -4,8 +4,10 @@ import {
|
||||||
useFigureModalContext,
|
useFigureModalContext,
|
||||||
useFigureModalExistingFigureContext,
|
useFigureModalExistingFigureContext,
|
||||||
} from '../figure-modal-context'
|
} from '../figure-modal-context'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FigureModalEditFigureSource: FC = () => {
|
export const FigureModalEditFigureSource: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { dispatch } = useFigureModalContext()
|
const { dispatch } = useFigureModalContext()
|
||||||
const { name } = useFigureModalExistingFigureContext()
|
const { name } = useFigureModalExistingFigureContext()
|
||||||
|
|
||||||
|
@ -19,7 +21,7 @@ export const FigureModalEditFigureSource: FC = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FileContainer
|
<FileContainer
|
||||||
name={name ?? 'Unknown'}
|
name={name ?? t('unknown')}
|
||||||
status={FileUploadStatus.SUCCESS}
|
status={FileUploadStatus.SUCCESS}
|
||||||
onDelete={() => {
|
onDelete={() => {
|
||||||
dispatch({ sourcePickerShown: true })
|
dispatch({ sourcePickerShown: true })
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { File, isImageEntity } from '../../../utils/file'
|
||||||
import { postJSON } from '../../../../../infrastructure/fetch-json'
|
import { postJSON } from '../../../../../infrastructure/fetch-json'
|
||||||
import { useProjectContext } from '../../../../../shared/context/project-context'
|
import { useProjectContext } from '../../../../../shared/context/project-context'
|
||||||
import { FileRelocator } from '../file-relocator'
|
import { FileRelocator } from '../file-relocator'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
function suggestName(path: string) {
|
function suggestName(path: string) {
|
||||||
const parts = path.split('/')
|
const parts = path.split('/')
|
||||||
|
@ -26,6 +27,7 @@ function suggestName(path: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FigureModalOtherProjectSource: FC = () => {
|
export const FigureModalOtherProjectSource: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { dispatch } = useFigureModalContext()
|
const { dispatch } = useFigureModalContext()
|
||||||
const { _id: projectId } = useProjectContext()
|
const { _id: projectId } = useProjectContext()
|
||||||
const { loading: projectsLoading, data: projects, error } = useUserProjects()
|
const { loading: projectsLoading, data: projects, error } = useUserProjects()
|
||||||
|
@ -124,8 +126,8 @@ export const FigureModalOtherProjectSource: FC = () => {
|
||||||
items={projects ?? []}
|
items={projects ?? []}
|
||||||
itemToString={project => (project ? project.name : '')}
|
itemToString={project => (project ? project.name : '')}
|
||||||
itemToKey={item => item._id}
|
itemToKey={item => item._id}
|
||||||
defaultText="Select a project"
|
defaultText={t('select_a_project')}
|
||||||
label="Project"
|
label={t('project_figure_modal')}
|
||||||
disabled={projectsLoading}
|
disabled={projectsLoading}
|
||||||
onSelectedItemChanged={item => {
|
onSelectedItemChanged={item => {
|
||||||
const suggestion = nameDirty ? name : ''
|
const suggestion = nameDirty ? name : ''
|
||||||
|
@ -161,8 +163,8 @@ export const FigureModalOtherProjectSource: FC = () => {
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
{usingOutputFiles
|
{usingOutputFiles
|
||||||
? 'select from project files'
|
? t('select_from_project_files')
|
||||||
: 'select from output files'}
|
: t('select_from_output_files')}
|
||||||
</span>
|
</span>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -187,8 +189,8 @@ const SelectFile = <T extends { path: string }>({
|
||||||
disabled,
|
disabled,
|
||||||
files,
|
files,
|
||||||
onSelectedItemChange,
|
onSelectedItemChange,
|
||||||
defaultText = 'Select a file',
|
defaultText,
|
||||||
label = 'Image file',
|
label,
|
||||||
loading = false,
|
loading = false,
|
||||||
}: {
|
}: {
|
||||||
disabled: boolean
|
disabled: boolean
|
||||||
|
@ -198,6 +200,9 @@ const SelectFile = <T extends { path: string }>({
|
||||||
loading?: boolean
|
loading?: boolean
|
||||||
onSelectedItemChange?: (item: T | null | undefined) => any
|
onSelectedItemChange?: (item: T | null | undefined) => any
|
||||||
}) => {
|
}) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
|
defaultText = defaultText ?? t('select_a_file')
|
||||||
|
label = label ?? t('image_file')
|
||||||
const imageFiles = useMemo(() => files?.filter(isImageEntity), [files])
|
const imageFiles = useMemo(() => files?.filter(isImageEntity), [files])
|
||||||
const empty = loading || !imageFiles || imageFiles.length === 0
|
const empty = loading || !imageFiles || imageFiles.length === 0
|
||||||
return (
|
return (
|
||||||
|
@ -207,7 +212,7 @@ const SelectFile = <T extends { path: string }>({
|
||||||
itemToString={file => (file ? file.path.replace(/^\//, '') : '')}
|
itemToString={file => (file ? file.path.replace(/^\//, '') : '')}
|
||||||
itemToKey={file => file.path}
|
itemToKey={file => file.path}
|
||||||
defaultText={
|
defaultText={
|
||||||
imageFiles?.length === 0 ? 'No image files found' : defaultText
|
imageFiles?.length === 0 ? t('no_image_files_found') : defaultText
|
||||||
}
|
}
|
||||||
label={label}
|
label={label}
|
||||||
disabled={disabled || empty}
|
disabled={disabled || empty}
|
||||||
|
@ -241,6 +246,7 @@ const SelectFromProjectOutputFiles: FC<{
|
||||||
projectId?: string
|
projectId?: string
|
||||||
onSelectedItemChange?: (item: OutputEntity | null | undefined) => any
|
onSelectedItemChange?: (item: OutputEntity | null | undefined) => any
|
||||||
}> = ({ projectId, onSelectedItemChange }) => {
|
}> = ({ projectId, onSelectedItemChange }) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { loading, data: entities, error } = useProjectOutputFiles(projectId)
|
const { loading, data: entities, error } = useProjectOutputFiles(projectId)
|
||||||
const { dispatch } = useFigureModalContext()
|
const { dispatch } = useFigureModalContext()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -250,8 +256,8 @@ const SelectFromProjectOutputFiles: FC<{
|
||||||
}, [error, dispatch])
|
}, [error, dispatch])
|
||||||
return (
|
return (
|
||||||
<SelectFile
|
<SelectFile
|
||||||
label="Output file"
|
label={t('output_file')}
|
||||||
defaultText="Select an output file"
|
defaultText={t('select_an_output_file')}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
files={entities}
|
files={entities}
|
||||||
disabled={!projectId}
|
disabled={!projectId}
|
||||||
|
|
|
@ -3,8 +3,10 @@ import useScopeValue from '../../../../../shared/hooks/use-scope-value'
|
||||||
import { Select } from '../../../../../shared/components/select'
|
import { Select } from '../../../../../shared/components/select'
|
||||||
import { useFigureModalContext } from '../figure-modal-context'
|
import { useFigureModalContext } from '../figure-modal-context'
|
||||||
import { FileOrDirectory, filterFiles, isImageFile } from '../../../utils/file'
|
import { FileOrDirectory, filterFiles, isImageFile } from '../../../utils/file'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
export const FigureModalCurrentProjectSource: FC = () => {
|
export const FigureModalCurrentProjectSource: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const [rootFolder] = useScopeValue<FileOrDirectory>('rootFolder')
|
const [rootFolder] = useScopeValue<FileOrDirectory>('rootFolder')
|
||||||
const files = useMemo(
|
const files = useMemo(
|
||||||
() => filterFiles(rootFolder)?.filter(isImageFile),
|
() => filterFiles(rootFolder)?.filter(isImageFile),
|
||||||
|
@ -19,7 +21,9 @@ export const FigureModalCurrentProjectSource: FC = () => {
|
||||||
itemToSubtitle={item => item?.path ?? ''}
|
itemToSubtitle={item => item?.path ?? ''}
|
||||||
itemToKey={item => item.id}
|
itemToKey={item => item.id}
|
||||||
defaultText={
|
defaultText={
|
||||||
noFiles ? 'No image files found' : 'Select image from project files'
|
noFiles
|
||||||
|
? t('no_image_files_found')
|
||||||
|
: t('select_image_from_project_files')
|
||||||
}
|
}
|
||||||
label="Image file"
|
label="Image file"
|
||||||
onSelectedItemChanged={item => {
|
onSelectedItemChanged={item => {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import Icon from '../../../../../shared/components/icon'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { Button } from 'react-bootstrap'
|
import { Button } from 'react-bootstrap'
|
||||||
import { FileRelocator } from '../file-relocator'
|
import { FileRelocator } from '../file-relocator'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
const maxFileSize = window.ExposedSettings.maxUploadSize
|
const maxFileSize = window.ExposedSettings.maxUploadSize
|
||||||
|
|
||||||
|
@ -26,6 +27,7 @@ export enum FileUploadStatus {
|
||||||
/* eslint-enable no-unused-vars */
|
/* eslint-enable no-unused-vars */
|
||||||
|
|
||||||
export const FigureModalUploadFileSource: FC = () => {
|
export const FigureModalUploadFileSource: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const { dispatch } = useFigureModalContext()
|
const { dispatch } = useFigureModalContext()
|
||||||
const { _id: projectId } = useProjectContext()
|
const { _id: projectId } = useProjectContext()
|
||||||
const [, rootFolder] = useCurrentProjectFolders()
|
const [, rootFolder] = useCurrentProjectFolders()
|
||||||
|
@ -217,9 +219,11 @@ export const FigureModalUploadFileSource: FC = () => {
|
||||||
strings: {
|
strings: {
|
||||||
// Text to show on the droppable area.
|
// Text to show on the droppable area.
|
||||||
// `%{browseFiles}` is replaced with a link that opens the system file selection dialog.
|
// `%{browseFiles}` is replaced with a link that opens the system file selection dialog.
|
||||||
dropPasteFiles: `Drag here, paste an image, or %{browseFiles}`,
|
dropPasteFiles: `${t(
|
||||||
|
'drag_here_paste_an_image_or'
|
||||||
|
)} %{browseFiles}`,
|
||||||
// Used as the label for the link that opens the system file selection dialog.
|
// Used as the label for the link that opens the system file selection dialog.
|
||||||
browseFiles: 'select from your computer',
|
browseFiles: t('select_from_your_computer'),
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { useProjectContext } from '../../../../../shared/context/project-context
|
||||||
import { File } from '../../../utils/file'
|
import { File } from '../../../utils/file'
|
||||||
import { useCurrentProjectFolders } from '../../../hooks/useCurrentProjectFolders'
|
import { useCurrentProjectFolders } from '../../../hooks/useCurrentProjectFolders'
|
||||||
import { FileRelocator } from '../file-relocator'
|
import { FileRelocator } from '../file-relocator'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
function generateLinkedFileFetcher(
|
function generateLinkedFileFetcher(
|
||||||
projectId: string,
|
projectId: string,
|
||||||
|
@ -30,6 +31,7 @@ function generateLinkedFileFetcher(
|
||||||
}
|
}
|
||||||
|
|
||||||
export const FigureModalUrlSource: FC = () => {
|
export const FigureModalUrlSource: FC = () => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const [url, setUrl] = useState<string>('')
|
const [url, setUrl] = useState<string>('')
|
||||||
const [nameDirty, setNameDirty] = useState<boolean>(false)
|
const [nameDirty, setNameDirty] = useState<boolean>(false)
|
||||||
const [name, setName] = useState<string>('')
|
const [name, setName] = useState<string>('')
|
||||||
|
@ -61,12 +63,12 @@ export const FigureModalUrlSource: FC = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<label htmlFor="figure-modal-url-url">Image URL</label>
|
<label htmlFor="figure-modal-url-url">{t('image_url')}</label>
|
||||||
<input
|
<input
|
||||||
id="figure-modal-url-url"
|
id="figure-modal-url-url"
|
||||||
type="text"
|
type="text"
|
||||||
className="form-control figure-modal-input-field"
|
className="form-control figure-modal-input-field"
|
||||||
placeholder="Enter image URL"
|
placeholder={t('enter_image_url')}
|
||||||
value={url}
|
value={url}
|
||||||
onChange={e => {
|
onChange={e => {
|
||||||
setUrl(e.target.value)
|
setUrl(e.target.value)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { useSelect } from 'downshift'
|
import { useSelect } from 'downshift'
|
||||||
import Icon from './icon'
|
import Icon from './icon'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
type SelectProps<T> = {
|
type SelectProps<T> = {
|
||||||
items: T[]
|
items: T[]
|
||||||
|
@ -29,6 +30,7 @@ export const Select = <T,>({
|
||||||
optionalLabel = false,
|
optionalLabel = false,
|
||||||
loading = false,
|
loading = false,
|
||||||
}: SelectProps<T>) => {
|
}: SelectProps<T>) => {
|
||||||
|
const { t } = useTranslation()
|
||||||
const {
|
const {
|
||||||
isOpen,
|
isOpen,
|
||||||
selectedItem,
|
selectedItem,
|
||||||
|
@ -54,7 +56,7 @@ export const Select = <T,>({
|
||||||
{label}{' '}
|
{label}{' '}
|
||||||
{optionalLabel && (
|
{optionalLabel && (
|
||||||
<span className="select-optional-label text-muted">
|
<span className="select-optional-label text-muted">
|
||||||
(Optional)
|
({t('optional')})
|
||||||
</span>
|
</span>
|
||||||
)}{' '}
|
)}{' '}
|
||||||
{loading && <Icon fw type="spinner" spin />}
|
{loading && <Icon fw type="spinner" spin />}
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{
|
{
|
||||||
|
"1_2_width": "½ width",
|
||||||
|
"1_4_width": "¼ width",
|
||||||
|
"3_4_width": "¾ width",
|
||||||
"About": "About",
|
"About": "About",
|
||||||
"Account": "Account",
|
"Account": "Account",
|
||||||
"Account Settings": "Account Settings",
|
"Account Settings": "Account Settings",
|
||||||
|
@ -8,6 +11,8 @@
|
||||||
"Subscription": "Subscription",
|
"Subscription": "Subscription",
|
||||||
"Terms": "Terms",
|
"Terms": "Terms",
|
||||||
"Universities": "Universities",
|
"Universities": "Universities",
|
||||||
|
"a_custom_size_has_been_used_in_the_latex_code": "A custom size has been used in the LaTeX code.",
|
||||||
|
"a_file_with_that_name_already_exists_and_will_be_overriden": "A file with that name already exists. That file will be overwritten.",
|
||||||
"a_more_comprehensive_list_of_keyboard_shortcuts": "A more comprehensive list of keyboard shortcuts can be found in <0>this __appName__ project template</0>",
|
"a_more_comprehensive_list_of_keyboard_shortcuts": "A more comprehensive list of keyboard shortcuts can be found in <0>this __appName__ project template</0>",
|
||||||
"about": "About",
|
"about": "About",
|
||||||
"about_to_archive_projects": "You are about to archive the following projects:",
|
"about_to_archive_projects": "You are about to archive the following projects:",
|
||||||
|
@ -99,6 +104,7 @@
|
||||||
"archived_projects": "Archived Projects",
|
"archived_projects": "Archived Projects",
|
||||||
"archiving_projects_wont_affect_collaborators": "Archiving projects won’t affect your collaborators.",
|
"archiving_projects_wont_affect_collaborators": "Archiving projects won’t affect your collaborators.",
|
||||||
"are_you_affiliated_with_an_institution": "Are you affiliated with an institution?",
|
"are_you_affiliated_with_an_institution": "Are you affiliated with an institution?",
|
||||||
|
"are_you_getting_an_undefined_control_sequence_error": "Are you getting an Undefined Control Sequence error? If you are, make sure you’ve loaded the graphicx package—<0>\\usepackage{graphicx}</0>—in the preamble (first section of code) in your document. <1>Learn more</1>",
|
||||||
"are_you_still_at": "Are you still at <0>__institutionName__</0>?",
|
"are_you_still_at": "Are you still at <0>__institutionName__</0>?",
|
||||||
"are_you_sure": "Are you sure?",
|
"are_you_sure": "Are you sure?",
|
||||||
"as_a_member_of_sso_required": "As a member of <b>__institutionName__</b>, you must log in to <b>__appName__</b> through your institution.",
|
"as_a_member_of_sso_required": "As a member of <b>__institutionName__</b>, you must log in to <b>__appName__</b> through your institution.",
|
||||||
|
@ -116,6 +122,7 @@
|
||||||
"autocompile_disabled_reason": "Due to high server load, background recompilation has been temporarily disabled. Please recompile by clicking the button above.",
|
"autocompile_disabled_reason": "Due to high server load, background recompilation has been temporarily disabled. Please recompile by clicking the button above.",
|
||||||
"autocomplete": "Autocomplete",
|
"autocomplete": "Autocomplete",
|
||||||
"autocomplete_references": "Reference Autocomplete (inside a <code>\\cite{}</code> block)",
|
"autocomplete_references": "Reference Autocomplete (inside a <code>\\cite{}</code> block)",
|
||||||
|
"back": "Back",
|
||||||
"back_to_account_settings": "Back to account settings",
|
"back_to_account_settings": "Back to account settings",
|
||||||
"back_to_editor": "Back to the editor",
|
"back_to_editor": "Back to the editor",
|
||||||
"back_to_log_in": "Back to log in",
|
"back_to_log_in": "Back to log in",
|
||||||
|
@ -200,6 +207,7 @@
|
||||||
"change_to_annual_billing_and_save": "Get <0>__percentage__</0> off with annual billing. If you switch now you’ll save <1>__yearlySaving__</1> per year.",
|
"change_to_annual_billing_and_save": "Get <0>__percentage__</0> off with annual billing. If you switch now you’ll save <1>__yearlySaving__</1> per year.",
|
||||||
"change_to_group_plan": "Change to a group plan",
|
"change_to_group_plan": "Change to a group plan",
|
||||||
"change_to_this_plan": "Change to this plan",
|
"change_to_this_plan": "Change to this plan",
|
||||||
|
"changing_the_position_of_your_figure": "Changing the position of your figure",
|
||||||
"chat": "Chat",
|
"chat": "Chat",
|
||||||
"chat_error": "Could not load chat messages, please try again.",
|
"chat_error": "Could not load chat messages, please try again.",
|
||||||
"check_your_email": "Check your email",
|
"check_your_email": "Check your email",
|
||||||
|
@ -307,10 +315,12 @@
|
||||||
"customize": "Customize",
|
"customize": "Customize",
|
||||||
"customize_your_group_subscription": "Customize your group subscription",
|
"customize_your_group_subscription": "Customize your group subscription",
|
||||||
"customize_your_plan": "Customize your plan",
|
"customize_your_plan": "Customize your plan",
|
||||||
|
"customizing_figures": "Customizing figures",
|
||||||
"da": "Danish",
|
"da": "Danish",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"date_and_owner": "Date and owner",
|
"date_and_owner": "Date and owner",
|
||||||
"de": "German",
|
"de": "German",
|
||||||
|
"dealing_with_errors": "Dealing with errors",
|
||||||
"december": "December",
|
"december": "December",
|
||||||
"dedicated_account_manager": "Dedicated account manager",
|
"dedicated_account_manager": "Dedicated account manager",
|
||||||
"dedicated_account_manager_info": "Our Account Management Team will be able to assist with requests, questions and to help you spread the word about Overleaf with promotional materials, training resources and webinars.",
|
"dedicated_account_manager_info": "Our Account Management Team will be able to assist with requests, questions and to help you spread the word about Overleaf with promotional materials, training resources and webinars.",
|
||||||
|
@ -322,6 +332,7 @@
|
||||||
"delete_acct_no_existing_pw": "Please use the password reset form to set a password before deleting your account",
|
"delete_acct_no_existing_pw": "Please use the password reset form to set a password before deleting your account",
|
||||||
"delete_and_leave": "Delete / Leave",
|
"delete_and_leave": "Delete / Leave",
|
||||||
"delete_and_leave_projects": "Delete and Leave Projects",
|
"delete_and_leave_projects": "Delete and Leave Projects",
|
||||||
|
"delete_figure": "Delete figure",
|
||||||
"delete_folder": "Delete Folder",
|
"delete_folder": "Delete Folder",
|
||||||
"delete_projects": "Delete Projects",
|
"delete_projects": "Delete Projects",
|
||||||
"delete_tag": "Delete Tag",
|
"delete_tag": "Delete Tag",
|
||||||
|
@ -361,6 +372,7 @@
|
||||||
"download_zip_file": "Download .zip File",
|
"download_zip_file": "Download .zip File",
|
||||||
"drag_a_zip_file": "drag a .zip file",
|
"drag_a_zip_file": "drag a .zip file",
|
||||||
"drag_here": "drag here",
|
"drag_here": "drag here",
|
||||||
|
"drag_here_paste_an_image_or": "Drag here, paste an image, or ",
|
||||||
"drop_files_here_to_upload": "Drop files here to upload",
|
"drop_files_here_to_upload": "Drop files here to upload",
|
||||||
"dropbox_already_linked_error": "Your Dropbox account cannot be linked as it is already linked with another Overleaf account.",
|
"dropbox_already_linked_error": "Your Dropbox account cannot be linked as it is already linked with another Overleaf account.",
|
||||||
"dropbox_already_linked_error_with_email": "Your Dropbox account cannot be linked as it is already linked with another Overleaf account using email address __otherUsersEmail__.",
|
"dropbox_already_linked_error_with_email": "Your Dropbox account cannot be linked as it is already linked with another Overleaf account using email address __otherUsersEmail__.",
|
||||||
|
@ -395,10 +407,12 @@
|
||||||
"edit_dictionary": "Edit Dictionary",
|
"edit_dictionary": "Edit Dictionary",
|
||||||
"edit_dictionary_empty": "Your custom dictionary is empty.",
|
"edit_dictionary_empty": "Your custom dictionary is empty.",
|
||||||
"edit_dictionary_remove": "Remove from dictionary",
|
"edit_dictionary_remove": "Remove from dictionary",
|
||||||
|
"edit_figure": "Edit figure",
|
||||||
"edit_in_source_to_see_your_entire_latex_code": "Edit in <0>Source</0> to see your entire LaTeX code, or choose <0>Rich Text</0> for something more visual.",
|
"edit_in_source_to_see_your_entire_latex_code": "Edit in <0>Source</0> to see your entire LaTeX code, or choose <0>Rich Text</0> for something more visual.",
|
||||||
"edit_in_the_left_pane_click_recompile": "Edit in the left pane. Click <0>Recompile</0> to see the PDF output on the right.",
|
"edit_in_the_left_pane_click_recompile": "Edit in the left pane. Click <0>Recompile</0> to see the PDF output on the right.",
|
||||||
"edit_tag": "Edit Tag",
|
"edit_tag": "Edit Tag",
|
||||||
"editing": "Editing",
|
"editing": "Editing",
|
||||||
|
"editing_captions": "Editing captions",
|
||||||
"editor_and_pdf": "Editor <0></0> PDF",
|
"editor_and_pdf": "Editor <0></0> PDF",
|
||||||
"editor_disconected_click_to_reconnect": "Editor disconnected, click anywhere to reconnect.",
|
"editor_disconected_click_to_reconnect": "Editor disconnected, click anywhere to reconnect.",
|
||||||
"editor_only_hide_pdf": "Editor only <0>(hide PDF)</0>",
|
"editor_only_hide_pdf": "Editor only <0>(hide PDF)</0>",
|
||||||
|
@ -424,6 +438,7 @@
|
||||||
"empty_zip_file": "Zip doesn’t contain any file",
|
"empty_zip_file": "Zip doesn’t contain any file",
|
||||||
"en": "English",
|
"en": "English",
|
||||||
"end_of_document": "End of document",
|
"end_of_document": "End of document",
|
||||||
|
"enter_image_url": "Enter image URL",
|
||||||
"enter_institution_email_to_log_in": "Enter your institutional email to log in through your institution.",
|
"enter_institution_email_to_log_in": "Enter your institutional email to log in through your institution.",
|
||||||
"enter_your_email_address": "Enter your email address",
|
"enter_your_email_address": "Enter your email address",
|
||||||
"enter_your_email_address_below_and_we_will_send_you_a_link_to_reset_your_password": "Enter your email address below, and we will send you a link to reset your password",
|
"enter_your_email_address_below_and_we_will_send_you_a_link_to_reset_your_password": "Enter your email address below, and we will send you a link to reset your password",
|
||||||
|
@ -481,6 +496,7 @@
|
||||||
"file_has_been_deleted": "__filename__ has been deleted",
|
"file_has_been_deleted": "__filename__ has been deleted",
|
||||||
"file_name": "File Name",
|
"file_name": "File Name",
|
||||||
"file_name_in_this_project": "File Name In This Project",
|
"file_name_in_this_project": "File Name In This Project",
|
||||||
|
"file_name_in_this_project_figure_modal": "File name in this project",
|
||||||
"file_outline": "File outline",
|
"file_outline": "File outline",
|
||||||
"file_restored": "Your file (__filename__) has been recovered.",
|
"file_restored": "Your file (__filename__) has been recovered.",
|
||||||
"file_restored_back_to_editor": "You can go back to the editor and work on it again.",
|
"file_restored_back_to_editor": "You can go back to the editor and work on it again.",
|
||||||
|
@ -496,6 +512,7 @@
|
||||||
"first_name": "First Name",
|
"first_name": "First Name",
|
||||||
"first_x_days_free_after_that_y_per_month": "First <0>__trialLen__ days free</0>, after that <0>__price__</0> per month",
|
"first_x_days_free_after_that_y_per_month": "First <0>__trialLen__ days free</0>, after that <0>__price__</0> per month",
|
||||||
"fold_line": "Fold line",
|
"fold_line": "Fold line",
|
||||||
|
"folder_location": "Folder location",
|
||||||
"folders": "Folders",
|
"folders": "Folders",
|
||||||
"following_paths_conflict": "The following files and folders conflict with the same path",
|
"following_paths_conflict": "The following files and folders conflict with the same path",
|
||||||
"font_family": "Font Family",
|
"font_family": "Font Family",
|
||||||
|
@ -530,6 +547,7 @@
|
||||||
"full_doc_history_info": "Travel back in time to see any version and who made changes. No matter what happens, we’ve got your back.",
|
"full_doc_history_info": "Travel back in time to see any version and who made changes. No matter what happens, we’ve got your back.",
|
||||||
"full_doc_history_info_v2": "You can see all the edits in your project and who made every change. Add labels to quickly access specific versions.",
|
"full_doc_history_info_v2": "You can see all the edits in your project and who made every change. Add labels to quickly access specific versions.",
|
||||||
"full_document_history": "Full document <0>history</0>",
|
"full_document_history": "Full document <0>history</0>",
|
||||||
|
"full_width": "Full width",
|
||||||
"galileo_feedback_button": "Give feedback",
|
"galileo_feedback_button": "Give feedback",
|
||||||
"galileo_feedback_detail": "Tell us more",
|
"galileo_feedback_detail": "Tell us more",
|
||||||
"galileo_feedback_intro": "We are working on improving Galileo, your feedback is very welcome. ",
|
"galileo_feedback_intro": "We are working on improving Galileo, your feedback is very welcome. ",
|
||||||
|
@ -695,6 +713,9 @@
|
||||||
"ignore_and_continue_institution_linking": "You can also ignore this and <a href=\"__link__\">continue to __appName__ with your <b>__email__</b> account</a>.",
|
"ignore_and_continue_institution_linking": "You can also ignore this and <a href=\"__link__\">continue to __appName__ with your <b>__email__</b> account</a>.",
|
||||||
"ignore_validation_errors": "Don’t check syntax",
|
"ignore_validation_errors": "Don’t check syntax",
|
||||||
"ill_take_it": "I’ll take it!",
|
"ill_take_it": "I’ll take it!",
|
||||||
|
"image_file": "Image file",
|
||||||
|
"image_url": "Image URL",
|
||||||
|
"image_width": "Image width",
|
||||||
"import_from_github": "Import from GitHub",
|
"import_from_github": "Import from GitHub",
|
||||||
"import_to_sharelatex": "Import to __appName__",
|
"import_to_sharelatex": "Import to __appName__",
|
||||||
"imported_from_another_project_at_date": "Imported from <0>Another project</0>/__sourceEntityPathHTML__, at __formattedDate__ __relativeDate__",
|
"imported_from_another_project_at_date": "Imported from <0>Another project</0>/__sourceEntityPathHTML__, at __formattedDate__ __relativeDate__",
|
||||||
|
@ -708,10 +729,17 @@
|
||||||
"in_order_to_have_a_secure_account_make_sure_your_password": "To help keep your account secure, make sure your new password:",
|
"in_order_to_have_a_secure_account_make_sure_your_password": "To help keep your account secure, make sure your new password:",
|
||||||
"in_order_to_match_institutional_metadata_2": "In order to match your institutional metadata, we’ve linked your account using <0>__email__</0>.",
|
"in_order_to_match_institutional_metadata_2": "In order to match your institutional metadata, we’ve linked your account using <0>__email__</0>.",
|
||||||
"in_order_to_match_institutional_metadata_associated": "In order to match your institutional metadata, your account is associated with the email <b>__email__</b>.",
|
"in_order_to_match_institutional_metadata_associated": "In order to match your institutional metadata, your account is associated with the email <b>__email__</b>.",
|
||||||
|
"include_caption": "Include caption",
|
||||||
|
"include_label": "Include label",
|
||||||
"increased_compile_timeout": "Increased compile timeout",
|
"increased_compile_timeout": "Increased compile timeout",
|
||||||
"indvidual_plans": "Individual Plans",
|
"indvidual_plans": "Individual Plans",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"inr_discount_offer": "Good news! You can now use Rupees ₹ to pay for an Overleaf subscription, giving you a <0>70% discount</0> on our premium features.",
|
"inr_discount_offer": "Good news! You can now use Rupees ₹ to pay for an Overleaf subscription, giving you a <0>70% discount</0> on our premium features.",
|
||||||
|
"insert_figure": "Insert figure",
|
||||||
|
"insert_from_another_project": "Insert from another project",
|
||||||
|
"insert_from_project_files": "Insert from project files",
|
||||||
|
"insert_from_url": "Insert from URL",
|
||||||
|
"insert_image": "Insert image",
|
||||||
"institution": "Institution",
|
"institution": "Institution",
|
||||||
"institution_account": "Institution Account",
|
"institution_account": "Institution Account",
|
||||||
"institution_account_tried_to_add_affiliated_with_another_institution": "This email is <b>already associated</b> with your account but affiliated with another institution.",
|
"institution_account_tried_to_add_affiliated_with_another_institution": "This email is <b>already associated</b> with your account but affiliated with another institution.",
|
||||||
|
@ -771,6 +799,7 @@
|
||||||
"keybindings": "Keybindings",
|
"keybindings": "Keybindings",
|
||||||
"knowledge_base": "knowledge base",
|
"knowledge_base": "knowledge base",
|
||||||
"ko": "Korean",
|
"ko": "Korean",
|
||||||
|
"labels_help_you_to_easily_reference_your_figures": "Labels help you to easily reference your figures throughout your document. To reference a figure within the text, reference the label using the <0>\\ref{...}</0> command. This makes it easy to reference figures without needing to manually remember the figure numbering. <1>Learn more</1>",
|
||||||
"labs_program_already_participating": "You are enrolled in Labs",
|
"labs_program_already_participating": "You are enrolled in Labs",
|
||||||
"labs_program_badge_description": "While using __appName__, you will see Labs features marked with this badge:",
|
"labs_program_badge_description": "While using __appName__, you will see Labs features marked with this badge:",
|
||||||
"labs_program_benefits": "__appName__ is always looking for new ways to help users work more quickly and effectively. By joining Overleaf Labs, you can participate in experiments that explore innovative ideas in the space of collaborative writing and publishing.",
|
"labs_program_benefits": "__appName__ is always looking for new ways to help users work more quickly and effectively. By joining Overleaf Labs, you can participate in experiments that explore innovative ideas in the space of collaborative writing and publishing.",
|
||||||
|
@ -787,6 +816,7 @@
|
||||||
"latex_guides": "LaTeX guides",
|
"latex_guides": "LaTeX guides",
|
||||||
"latex_help_guide": "LaTeX help guide",
|
"latex_help_guide": "LaTeX help guide",
|
||||||
"latex_in_thirty_minutes": "LaTeX in 30 minutes",
|
"latex_in_thirty_minutes": "LaTeX in 30 minutes",
|
||||||
|
"latex_places_figures_according_to_a_special_algorithm": "LaTeX places figures according to a special algorithm. You can use something called ‘placement parameters’ to influence the positioning of the figure. <0>Find out how</>",
|
||||||
"latex_templates": "LaTeX Templates",
|
"latex_templates": "LaTeX Templates",
|
||||||
"layout": "Layout",
|
"layout": "Layout",
|
||||||
"layout_processing": "Layout processing",
|
"layout_processing": "Layout processing",
|
||||||
|
@ -964,7 +994,9 @@
|
||||||
"no_complicated_latex_install": "No complicated LaTeX installation",
|
"no_complicated_latex_install": "No complicated LaTeX installation",
|
||||||
"no_existing_password": "Please use the password reset form to set your password",
|
"no_existing_password": "Please use the password reset form to set your password",
|
||||||
"no_featured_templates": "No featured templates",
|
"no_featured_templates": "No featured templates",
|
||||||
|
"no_folder": "No folder",
|
||||||
"no_history_available": "This project doesn’t have any history yet. Please make some changes to the project and try again.",
|
"no_history_available": "This project doesn’t have any history yet. Please make some changes to the project and try again.",
|
||||||
|
"no_image_files_found": "No image files found",
|
||||||
"no_members": "No members",
|
"no_members": "No members",
|
||||||
"no_messages": "No messages",
|
"no_messages": "No messages",
|
||||||
"no_new_commits_in_github": "No new commits in GitHub since last merge.",
|
"no_new_commits_in_github": "No new commits in GitHub since last merge.",
|
||||||
|
@ -1030,6 +1062,7 @@
|
||||||
"other_output_files": "Download other output files",
|
"other_output_files": "Download other output files",
|
||||||
"other_sessions": "Other Sessions",
|
"other_sessions": "Other Sessions",
|
||||||
"our_values": "Our values",
|
"our_values": "Our values",
|
||||||
|
"output_file": "Output file",
|
||||||
"over": "over",
|
"over": "over",
|
||||||
"over_x_templates_easy_getting_started": "There are thousands of __templates__ in our template gallery, so it’s really easy to get started, whether you’re writing a journal article, thesis, CV or something else.",
|
"over_x_templates_easy_getting_started": "There are thousands of __templates__ in our template gallery, so it’s really easy to get started, whether you’re writing a journal article, thesis, CV or something else.",
|
||||||
"overall_theme": "Overall theme",
|
"overall_theme": "Overall theme",
|
||||||
|
@ -1136,6 +1169,7 @@
|
||||||
"professional": "Professional",
|
"professional": "Professional",
|
||||||
"project": "project",
|
"project": "project",
|
||||||
"project_approaching_file_limit": "This project is approaching the file limit",
|
"project_approaching_file_limit": "This project is approaching the file limit",
|
||||||
|
"project_figure_modal": "Project",
|
||||||
"project_flagged_too_many_compiles": "This project has been flagged for compiling too often. The limit will be lifted shortly.",
|
"project_flagged_too_many_compiles": "This project has been flagged for compiling too often. The limit will be lifted shortly.",
|
||||||
"project_has_too_many_files": "This project has reached the 2000 file limit",
|
"project_has_too_many_files": "This project has reached the 2000 file limit",
|
||||||
"project_last_published_at": "Your project was last published at",
|
"project_last_published_at": "Your project was last published at",
|
||||||
|
@ -1235,6 +1269,11 @@
|
||||||
"rename_project": "Rename Project",
|
"rename_project": "Rename Project",
|
||||||
"renaming": "Renaming",
|
"renaming": "Renaming",
|
||||||
"reopen": "Re-open",
|
"reopen": "Re-open",
|
||||||
|
"replace_figure": "Replace figure",
|
||||||
|
"replace_from_another_project": "Replace from another project",
|
||||||
|
"replace_from_computer": "Replace from computer",
|
||||||
|
"replace_from_project_files": "Replace from project files",
|
||||||
|
"replace_from_url": "Replace from URL",
|
||||||
"reply": "Reply",
|
"reply": "Reply",
|
||||||
"repository_name": "Repository Name",
|
"repository_name": "Repository Name",
|
||||||
"republish": "Republish",
|
"republish": "Republish",
|
||||||
|
@ -1316,9 +1355,13 @@
|
||||||
"select_all": "Select all",
|
"select_all": "Select all",
|
||||||
"select_all_projects": "Select all projects",
|
"select_all_projects": "Select all projects",
|
||||||
"select_an_output_file": "Select an Output File",
|
"select_an_output_file": "Select an Output File",
|
||||||
|
"select_folder_from_project": "Select folder from project",
|
||||||
"select_from_output_files": "select from output files",
|
"select_from_output_files": "select from output files",
|
||||||
|
"select_from_project_files": "select from project files",
|
||||||
"select_from_source_files": "select from source files",
|
"select_from_source_files": "select from source files",
|
||||||
|
"select_from_your_computer": "select from your computer",
|
||||||
"select_github_repository": "Select a GitHub repository to import into __appName__.",
|
"select_github_repository": "Select a GitHub repository to import into __appName__.",
|
||||||
|
"select_image_from_project_files": "Select image from project files",
|
||||||
"select_project": "Select __project__",
|
"select_project": "Select __project__",
|
||||||
"select_projects": "Select Projects",
|
"select_projects": "Select Projects",
|
||||||
"select_tag": "Select tag __tagName__",
|
"select_tag": "Select tag __tagName__",
|
||||||
|
@ -1494,9 +1537,11 @@
|
||||||
"the_required_parameters_were_not_supplied": "The link to open this content on Overleaf was missing some required parameters. If this keeps happening for links on a particular site, please report this to them.",
|
"the_required_parameters_were_not_supplied": "The link to open this content on Overleaf was missing some required parameters. If this keeps happening for links on a particular site, please report this to them.",
|
||||||
"the_supplied_parameters_were_invalid": "The link to open this content on Overleaf included some invalid parameters. If this keeps happening for links on a particular site, please report this to them.",
|
"the_supplied_parameters_were_invalid": "The link to open this content on Overleaf included some invalid parameters. If this keeps happening for links on a particular site, please report this to them.",
|
||||||
"the_supplied_uri_is_invalid": "The link to open this content on Overleaf included an invalid URI. If this keeps happening for links on a particular site, please report this to them.",
|
"the_supplied_uri_is_invalid": "The link to open this content on Overleaf included an invalid URI. If this keeps happening for links on a particular site, please report this to them.",
|
||||||
|
"the_width_you_choose_here_is_based_on_the_width_of_the_text_in_your_document": "The width you choose here is based on the width of the text in your document. Alternatively, you can customize the image size directly in the LaTeX code.",
|
||||||
"theme": "Theme",
|
"theme": "Theme",
|
||||||
"then_x_price_per_month": "Then __price__ per month",
|
"then_x_price_per_month": "Then __price__ per month",
|
||||||
"then_x_price_per_year": "Then __price__ per year",
|
"then_x_price_per_year": "Then __price__ per year",
|
||||||
|
"there_are_lots_of_options_to_edit_and_customize_your_figures": "There are lots of options to edit and customize your figures, such as wrapping text around the figure, rotating the image, or including multiple images in a single figure. You’ll need to edit the LaTeX code to do this. <0>Find out how</0>",
|
||||||
"there_was_an_error_opening_your_content": "There was an error creating your project",
|
"there_was_an_error_opening_your_content": "There was an error creating your project",
|
||||||
"thesis": "Thesis",
|
"thesis": "Thesis",
|
||||||
"this_action_cannot_be_undone": "This action cannot be undone.",
|
"this_action_cannot_be_undone": "This action cannot be undone.",
|
||||||
|
@ -1507,6 +1552,7 @@
|
||||||
"this_project_is_public": "This project is public and can be edited by anyone with the URL.",
|
"this_project_is_public": "This project is public and can be edited by anyone with the URL.",
|
||||||
"this_project_is_public_read_only": "This project is public and can be viewed but not edited by anyone with the URL",
|
"this_project_is_public_read_only": "This project is public and can be viewed but not edited by anyone with the URL",
|
||||||
"this_project_will_appear_in_your_dropbox_folder_at": "This project will appear in your Dropbox folder at ",
|
"this_project_will_appear_in_your_dropbox_folder_at": "This project will appear in your Dropbox folder at ",
|
||||||
|
"this_tool_helps_you_insert_figures": "This tool helps you insert figures into your project without needing to write the LaTeX code. The following information explains more about the options in the tool and how to further customize your figures.",
|
||||||
"thousands_templates": "Thousands of templates",
|
"thousands_templates": "Thousands of templates",
|
||||||
"thousands_templates_info": "Produce beautiful documents starting from our gallery of LaTeX templates for journals, conferences, theses, reports, CVs and much more.",
|
"thousands_templates_info": "Produce beautiful documents starting from our gallery of LaTeX templates for journals, conferences, theses, reports, CVs and much more.",
|
||||||
"three_free_collab": "Three free collaborators",
|
"three_free_collab": "Three free collaborators",
|
||||||
|
@ -1589,8 +1635,10 @@
|
||||||
"unconfirmed": "Unconfirmed",
|
"unconfirmed": "Unconfirmed",
|
||||||
"undelete": "Undelete",
|
"undelete": "Undelete",
|
||||||
"undeleting": "Undeleting",
|
"undeleting": "Undeleting",
|
||||||
|
"understanding_labels": "Understanding labels",
|
||||||
"unfold_line": "Unfold line",
|
"unfold_line": "Unfold line",
|
||||||
"university": "University",
|
"university": "University",
|
||||||
|
"unknown": "Unknown",
|
||||||
"unlimited": "Unlimited",
|
"unlimited": "Unlimited",
|
||||||
"unlimited_collaborators_in_each_project": "Unlimited collaborators in each project",
|
"unlimited_collaborators_in_each_project": "Unlimited collaborators in each project",
|
||||||
"unlimited_collabs": "Unlimited collaborators",
|
"unlimited_collabs": "Unlimited collaborators",
|
||||||
|
@ -1629,6 +1677,7 @@
|
||||||
"upgrade_to_track_changes": "Upgrade to Track Changes",
|
"upgrade_to_track_changes": "Upgrade to Track Changes",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"upload_failed": "Upload failed",
|
"upload_failed": "Upload failed",
|
||||||
|
"upload_from_computer": "Upload from computer",
|
||||||
"upload_project": "Upload Project",
|
"upload_project": "Upload Project",
|
||||||
"upload_zipped_project": "Upload Zipped Project",
|
"upload_zipped_project": "Upload Zipped Project",
|
||||||
"url_to_fetch_the_file_from": "URL to fetch the file from",
|
"url_to_fetch_the_file_from": "URL to fetch the file from",
|
||||||
|
@ -1636,6 +1685,7 @@
|
||||||
"usage_metrics_info": "Metrics that show how many users are accessing the licence, how many projects are being created and worked on, and how much collaboration is happening in Overleaf.",
|
"usage_metrics_info": "Metrics that show how many users are accessing the licence, how many projects are being created and worked on, and how much collaboration is happening in Overleaf.",
|
||||||
"use_a_different_password": "Please use a different password",
|
"use_a_different_password": "Please use a different password",
|
||||||
"use_your_own_machine": "Use your own machine, with your own setup",
|
"use_your_own_machine": "Use your own machine, with your own setup",
|
||||||
|
"used_when_referring_to_the_figure_elsewhere_in_the_document": "Used when referring to the figure elsewhere in the document",
|
||||||
"user_already_added": "User already added",
|
"user_already_added": "User already added",
|
||||||
"user_deletion_error": "Sorry, something went wrong deleting your account. Please try again in a minute.",
|
"user_deletion_error": "Sorry, something went wrong deleting your account. Please try again in a minute.",
|
||||||
"user_deletion_password_reset_tip": "If you cannot remember your password, or if you are using Single-Sign-On with another provider to sign in (such as Twitter or Google), please <0>reset your password</0> and try again.",
|
"user_deletion_password_reset_tip": "If you cannot remember your password, or if you are using Single-Sign-On with another provider to sign in (such as Twitter or Google), please <0>reset your password</0> and try again.",
|
||||||
|
@ -1670,6 +1720,7 @@
|
||||||
"wed_love_you_to_stay": "We’d love you to stay",
|
"wed_love_you_to_stay": "We’d love you to stay",
|
||||||
"welcome_to_sl": "Welcome to __appName__!",
|
"welcome_to_sl": "Welcome to __appName__!",
|
||||||
"welcome_to_your_first_project": "Welcome to your first __appName__ project!",
|
"welcome_to_your_first_project": "Welcome to your first __appName__ project!",
|
||||||
|
"when_you_tick_the_include_caption_box": "When you tick the box “Include caption” the image will be inserted into your document with a placeholder caption. To edit it, you simply select the placeholder text and type to replace it with your own.",
|
||||||
"wide": "Wide",
|
"wide": "Wide",
|
||||||
"will_need_to_log_out_from_and_in_with": "You will need to <b>log out</b> from your <b>__email1__</b> account and then log in with <b>__email2__</b>.",
|
"will_need_to_log_out_from_and_in_with": "You will need to <b>log out</b> from your <b>__email1__</b> account and then log in with <b>__email2__</b>.",
|
||||||
"with_premium_subscription_you_also_get": "With an Overleaf Premium subscription you also get",
|
"with_premium_subscription_you_also_get": "With an Overleaf Premium subscription you also get",
|
||||||
|
|
Loading…
Reference in a new issue