mirror of
				https://github.com/gristlabs/grist-core.git
				synced 2025-06-13 20:53:59 +00:00 
			
		
		
		
	Adds multiple missing translations (#972)
Adds several missing translations, mostly in Forms and the onboarding modals.
This commit is contained in:
		
							parent
							
								
									6299db6872
								
							
						
					
					
						commit
						1e63c28a2a
					
				@ -1,4 +1,5 @@
 | 
				
			|||||||
import * as css from 'app/client/components/FormRendererCss';
 | 
					import * as css from 'app/client/components/FormRendererCss';
 | 
				
			||||||
 | 
					import {makeT} from 'app/client/lib/localization';
 | 
				
			||||||
import {FormField} from 'app/client/ui/FormAPI';
 | 
					import {FormField} from 'app/client/ui/FormAPI';
 | 
				
			||||||
import {sanitizeHTML} from 'app/client/ui/sanitizeHTML';
 | 
					import {sanitizeHTML} from 'app/client/ui/sanitizeHTML';
 | 
				
			||||||
import {dropdownWithSearch} from 'app/client/ui/searchDropdown';
 | 
					import {dropdownWithSearch} from 'app/client/ui/searchDropdown';
 | 
				
			||||||
@ -11,6 +12,8 @@ import {IPopupOptions, PopupControl} from 'popweasel';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const testId = makeTestId('test-form-');
 | 
					const testId = makeTestId('test-form-');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const t = makeT('FormRenderer');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A node in a recursive, tree-like hierarchy comprising the layout of a form.
 | 
					 * A node in a recursive, tree-like hierarchy comprising the layout of a form.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -165,7 +168,7 @@ class SubmitRenderer extends FormRenderer {
 | 
				
			|||||||
      css.error(dom.text(use => use(this.context.error) ?? '')),
 | 
					      css.error(dom.text(use => use(this.context.error) ?? '')),
 | 
				
			||||||
      css.submitButtons(
 | 
					      css.submitButtons(
 | 
				
			||||||
        css.resetButton(
 | 
					        css.resetButton(
 | 
				
			||||||
          'Reset',
 | 
					          t('Reset'),
 | 
				
			||||||
          dom.boolAttr('disabled', this.context.disabled),
 | 
					          dom.boolAttr('disabled', this.context.disabled),
 | 
				
			||||||
          {type: 'button'},
 | 
					          {type: 'button'},
 | 
				
			||||||
          dom.on('click', () => {
 | 
					          dom.on('click', () => {
 | 
				
			||||||
@ -182,7 +185,7 @@ class SubmitRenderer extends FormRenderer {
 | 
				
			|||||||
            dom.boolAttr('disabled', this.context.disabled),
 | 
					            dom.boolAttr('disabled', this.context.disabled),
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              type: 'submit',
 | 
					              type: 'submit',
 | 
				
			||||||
              value: this.context.rootLayoutNode.submitText || 'Submit',
 | 
					              value: this.context.rootLayoutNode.submitText || t('Submit'),
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            dom.on('click', () => validateRequiredLists()),
 | 
					            dom.on('click', () => validateRequiredLists()),
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
@ -356,7 +359,7 @@ class DateTimeRenderer extends TextRenderer {
 | 
				
			|||||||
  protected inputType = 'datetime-local';
 | 
					  protected inputType = 'datetime-local';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const SELECT_PLACEHOLDER = 'Select...';
 | 
					export const selectPlaceholder = () => t('Select...');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ChoiceRenderer extends BaseFieldRenderer  {
 | 
					class ChoiceRenderer extends BaseFieldRenderer  {
 | 
				
			||||||
  protected value: Observable<string>;
 | 
					  protected value: Observable<string>;
 | 
				
			||||||
@ -417,7 +420,7 @@ class ChoiceRenderer extends BaseFieldRenderer  {
 | 
				
			|||||||
      this._selectElement = css.select(
 | 
					      this._selectElement = css.select(
 | 
				
			||||||
        {name: this.name(), required: this.field.options.formRequired},
 | 
					        {name: this.name(), required: this.field.options.formRequired},
 | 
				
			||||||
        dom.on('input', (_e, elem) => this.value.set(elem.value)),
 | 
					        dom.on('input', (_e, elem) => this.value.set(elem.value)),
 | 
				
			||||||
        dom('option', {value: ''}, SELECT_PLACEHOLDER),
 | 
					        dom('option', {value: ''}, selectPlaceholder()),
 | 
				
			||||||
        this._choices.map((choice) => dom('option',
 | 
					        this._choices.map((choice) => dom('option',
 | 
				
			||||||
          {value: choice},
 | 
					          {value: choice},
 | 
				
			||||||
          dom.prop('selected', use => use(this.value) === choice),
 | 
					          dom.prop('selected', use => use(this.value) === choice),
 | 
				
			||||||
@ -434,18 +437,18 @@ class ChoiceRenderer extends BaseFieldRenderer  {
 | 
				
			|||||||
      ),
 | 
					      ),
 | 
				
			||||||
      dom.maybe(use => !use(isXSmallScreenObs()), () =>
 | 
					      dom.maybe(use => !use(isXSmallScreenObs()), () =>
 | 
				
			||||||
        css.searchSelect(
 | 
					        css.searchSelect(
 | 
				
			||||||
          dom('div', dom.text(use => use(this.value) || SELECT_PLACEHOLDER)),
 | 
					          dom('div', dom.text(use => use(this.value) || selectPlaceholder())),
 | 
				
			||||||
          dropdownWithSearch<string>({
 | 
					          dropdownWithSearch<string>({
 | 
				
			||||||
            action: (value) => this.value.set(value),
 | 
					            action: (value) => this.value.set(value),
 | 
				
			||||||
            options: () => [
 | 
					            options: () => [
 | 
				
			||||||
              {label: SELECT_PLACEHOLDER, value: '', placeholder: true},
 | 
					              {label: selectPlaceholder(), value: '', placeholder: true},
 | 
				
			||||||
              ...this._choices.map((choice) => ({
 | 
					              ...this._choices.map((choice) => ({
 | 
				
			||||||
                label: choice,
 | 
					                label: choice,
 | 
				
			||||||
                value: choice,
 | 
					                value: choice,
 | 
				
			||||||
              }),
 | 
					              }),
 | 
				
			||||||
            )],
 | 
					            )],
 | 
				
			||||||
            onClose: () => { setTimeout(() => this._selectElement.focus()); },
 | 
					            onClose: () => { setTimeout(() => this._selectElement.focus()); },
 | 
				
			||||||
            placeholder: 'Search',
 | 
					            placeholder: t('Search'),
 | 
				
			||||||
            acOptions: {maxResults: 1000, keepOrder: true, showEmptyItems: true},
 | 
					            acOptions: {maxResults: 1000, keepOrder: true, showEmptyItems: true},
 | 
				
			||||||
            popupOptions: {
 | 
					            popupOptions: {
 | 
				
			||||||
              trigger: [
 | 
					              trigger: [
 | 
				
			||||||
@ -757,7 +760,7 @@ class RefRenderer extends BaseFieldRenderer {
 | 
				
			|||||||
        dom.on('input', (_e, elem) => this.value.set(elem.value)),
 | 
					        dom.on('input', (_e, elem) => this.value.set(elem.value)),
 | 
				
			||||||
        dom('option',
 | 
					        dom('option',
 | 
				
			||||||
          {value: ''},
 | 
					          {value: ''},
 | 
				
			||||||
          SELECT_PLACEHOLDER,
 | 
					          selectPlaceholder(),
 | 
				
			||||||
          dom.prop('selected', use => use(this.value) === ''),
 | 
					          dom.prop('selected', use => use(this.value) === ''),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        this._choices.map((choice) => dom('option',
 | 
					        this._choices.map((choice) => dom('option',
 | 
				
			||||||
@ -778,12 +781,12 @@ class RefRenderer extends BaseFieldRenderer {
 | 
				
			|||||||
        css.searchSelect(
 | 
					        css.searchSelect(
 | 
				
			||||||
          dom('div', dom.text(use => {
 | 
					          dom('div', dom.text(use => {
 | 
				
			||||||
            const choice = this._choices.find((c) => String(c[0]) === use(this.value));
 | 
					            const choice = this._choices.find((c) => String(c[0]) === use(this.value));
 | 
				
			||||||
            return String(choice?.[1] || SELECT_PLACEHOLDER);
 | 
					            return String(choice?.[1] || selectPlaceholder());
 | 
				
			||||||
          })),
 | 
					          })),
 | 
				
			||||||
          dropdownWithSearch<string>({
 | 
					          dropdownWithSearch<string>({
 | 
				
			||||||
            action: (value) => this.value.set(value),
 | 
					            action: (value) => this.value.set(value),
 | 
				
			||||||
            options: () => [
 | 
					            options: () => [
 | 
				
			||||||
              {label: SELECT_PLACEHOLDER, value: '', placeholder: true},
 | 
					              {label: selectPlaceholder(), value: '', placeholder: true},
 | 
				
			||||||
              ...this._choices.map((choice) => ({
 | 
					              ...this._choices.map((choice) => ({
 | 
				
			||||||
                label: String(choice[1]),
 | 
					                label: String(choice[1]),
 | 
				
			||||||
                value: String(choice[0]),
 | 
					                value: String(choice[0]),
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import {FormLayoutNode, SELECT_PLACEHOLDER} from 'app/client/components/FormRenderer';
 | 
					import {FormLayoutNode, selectPlaceholder} from 'app/client/components/FormRenderer';
 | 
				
			||||||
import {buildEditor} from 'app/client/components/Forms/Editor';
 | 
					import {buildEditor} from 'app/client/components/Forms/Editor';
 | 
				
			||||||
import {FormView} from 'app/client/components/Forms/FormView';
 | 
					import {FormView} from 'app/client/components/Forms/FormView';
 | 
				
			||||||
import {BoxModel, ignoreClick} from 'app/client/components/Forms/Model';
 | 
					import {BoxModel, ignoreClick} from 'app/client/components/Forms/Model';
 | 
				
			||||||
@ -406,7 +406,7 @@ class ChoiceModel extends Question {
 | 
				
			|||||||
      ignoreClick,
 | 
					      ignoreClick,
 | 
				
			||||||
      dom.prop('name', use => use(use(this.field).colId)),
 | 
					      dom.prop('name', use => use(use(this.field).colId)),
 | 
				
			||||||
      dom('option',
 | 
					      dom('option',
 | 
				
			||||||
        SELECT_PLACEHOLDER,
 | 
					        selectPlaceholder(),
 | 
				
			||||||
        {value: ''},
 | 
					        {value: ''},
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      dom.forEach(this.choices, (choice) => dom('option',
 | 
					      dom.forEach(this.choices, (choice) => dom('option',
 | 
				
			||||||
@ -616,7 +616,7 @@ class RefModel extends RefListModel {
 | 
				
			|||||||
      ignoreClick,
 | 
					      ignoreClick,
 | 
				
			||||||
      dom.prop('name', this.model.colId),
 | 
					      dom.prop('name', this.model.colId),
 | 
				
			||||||
      dom('option',
 | 
					      dom('option',
 | 
				
			||||||
        SELECT_PLACEHOLDER,
 | 
					        selectPlaceholder(),
 | 
				
			||||||
        {value: ''},
 | 
					        {value: ''},
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      dom.forEach(this.options, ({label, value}) => dom('option',
 | 
					      dom.forEach(this.options, ({label, value}) => dom('option',
 | 
				
			||||||
 | 
				
			|||||||
@ -172,7 +172,7 @@ export function showTipPopup(
 | 
				
			|||||||
        cssBehavioralPromptHeader(
 | 
					        cssBehavioralPromptHeader(
 | 
				
			||||||
          cssHeaderIconAndText(
 | 
					          cssHeaderIconAndText(
 | 
				
			||||||
            icon('Idea'),
 | 
					            icon('Idea'),
 | 
				
			||||||
            cssHeaderText('TIP'),
 | 
					            cssHeaderText(t('TIP')),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        cssBehavioralPromptBody(
 | 
					        cssBehavioralPromptBody(
 | 
				
			||||||
 | 
				
			|||||||
@ -309,7 +309,7 @@ class OnBoardingPopupsCtl extends Disposable {
 | 
				
			|||||||
      ),
 | 
					      ),
 | 
				
			||||||
      Buttons(
 | 
					      Buttons(
 | 
				
			||||||
        bigBasicButton(
 | 
					        bigBasicButton(
 | 
				
			||||||
          'Previous', testId('previous'),
 | 
					          t('Previous'), testId('previous'),
 | 
				
			||||||
          dom.on('click', () => this._move(-1)),
 | 
					          dom.on('click', () => this._move(-1)),
 | 
				
			||||||
          dom.prop('disabled', isFirstStep),
 | 
					          dom.prop('disabled', isFirstStep),
 | 
				
			||||||
          {style: `margin-right: 8px; visibility: ${isFirstStep ? 'hidden' : 'visible'}`},
 | 
					          {style: `margin-right: 8px; visibility: ${isFirstStep ? 'hidden' : 'visible'}`},
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user