menu.active_directory = Active Directory
menu.active_directory_users = Active Directory Users
module.active_directory_sync = Active Directory Users
module.active_directory_sync_settings = Active Directory Settings
active_directory_sync.not_supported = Active Directory integration is not supported in your operating system. To upgrade your operating system please contact your dealer.
active_directory_sync.tab.settings = Settings
active_directory_sync.tab.users = Users
active_directory_sync.tab.sync = Sync
active_directory_sync.tab.mapping = Field Mapping
active_directory_sync.tab.advanced = Advanced
active_directory_sync.sync.configure_hint = Note! Active Directory syncing will not work without valid LDAP credentials.<br>To run a sync, please make sure the configuration is properly set in {0}.
active_directory_sync.sync.configure_hint.link = Active Directory
active_directory_sync.placeholder.users = Run Test (dry run) or Sync now to import users from LDAP into this table.
active_directory_sync.button.sync_now = Sync Now
active_directory_sync.runs.start_label = Start Directory Sync
active_directory_sync.runs.start_label.tooltip = Runs LDAP sync in the background (like Zero Touch). Watch status in the runs table; the Users tab refreshes when the run finishes.
active_directory_sync.runs.last_runs = Last Sync Runs
active_directory_sync.runs.log_title = Sync Run Log
active_directory_sync.runs.view_log = View Log
active_directory_sync.runs.col.started_at = Started
active_directory_sync.runs.col.trigger = Trigger
active_directory_sync.runs.col.status = Status
active_directory_sync.runs.col.log = Log
active_directory_sync.runs.status.running = In Progress
active_directory_sync.runs.status.success = Completed
active_directory_sync.runs.status.partial = Completed with errors
active_directory_sync.runs.status.error = Failed
active_directory_sync.runs.trigger.manual = Manual
active_directory_sync.runs.trigger.scheduled = Scheduled
active_directory_sync.runs.trigger.resync = Re-sync Selected
active_directory_sync.runs.trigger.test = Test
active_directory_sync.runs.started_title = Sync started
active_directory_sync.runs.started_message = Directory sync is running in the background. Status updates every few seconds.
active_directory_sync.runs.error.table_missing = Sync run history is not available (database patch missing).
active_directory_sync.runs.error.already_running = A directory sync is already in progress.
active_directory_sync.runs.error.start_failed = Could not start directory sync.
active_directory_sync.runs.error.spawn_failed = Could not start background sync process.
active_directory_sync.runs.error.not_found = Sync run not found.
active_directory_sync.runs.error.timed_out = Run timed out (the sync process did not complete).
active_directory_sync.button.refresh_users = Refresh List
active_directory_sync.button.export_issues = Export Errors/Conflicts (CSV)
active_directory_sync.button.resync_selected = Re-sync Selected
active_directory_sync.button.relink_selected = Re-link Selected
active_directory_sync.button.decouple_selected = Decouple Selected
active_directory_sync.lifecycle.decouple_confirm = Decouple selected users from Active Directory? Extensions stay in the PBX as manual. Sync rows will show status Decoupled.
active_directory_sync.lifecycle.relink_confirm = Re-link selected decoupled users to Active Directory? This will perform a real sync for the selected users.
active_directory_sync.lifecycle.decoupled = Decoupled {0} user(s). Skipped {1} already decoupled.
active_directory_sync.lifecycle.relinked = Re-linked {0} selected user(s).
active_directory_sync.lifecycle.result.decoupled = Decoupled from Active Directory (manual extension; no further directory updates until re-linked).
active_directory_sync.lifecycle.error.not_found = Sync user not found: {0}
active_directory_sync.lifecycle.error.not_decoupled = User {0} is not decoupled (only Decoupled rows can be re-linked).
active_directory_sync.lifecycle.error.dry_run_relink = Could not re-link: sync configuration is invalid.
active_directory_sync.lifecycle.error.provision_source = Could not update provisioning source for {0}.
active_directory_sync.button.clear_sync = Delete Sync Table
active_directory_sync.users.select_all = Select All
active_directory_sync.settings.scheduler_hint = Scheduled sync uses a systemd timer. Enable Sync must be on for the timer to run; the interval is set when you Save. View runs with: journalctl -u active-directory-sync.service
active_directory_sync.sync.resync_selected = Re-synced {0} selected user(s).
active_directory_sync.sync.cleared = Sync table cleared.
active_directory_sync.sync.error.no_selection = Select at least one user in the table.
active_directory_sync.clear_confirm = Delete all rows from the sync table? PBX extensions are not removed. The next sync will re-link existing extensions to AD users.
active_directory_sync.users.filter.all = All Statuses
active_directory_sync.users.filter.status = Status
active_directory_sync.users.filter.search = Search
active_directory_sync.users.filter.search.tooltip = Filter by username, display name, extension, department, AD identifier, last result, or status.
active_directory_sync.users.select_row = Select row
active_directory_sync.users.filter.department = Department
active_directory_sync.users.filter.department_all = All Departments
active_directory_sync.users.col.department = Department
active_directory_sync.users.col.department.tooltip = PBX departments assigned to the extension; before create, the value from AD at last sync.
active_directory_sync.users.summary = Showing {0} of {1} synced user records.
active_directory_sync.users.forumsys_hint = ForumSys POC: set Field mapping to uid (extension, username) and cn (display name), and User filter to (uid=*). Or click Load ForumSys POC defaults again to apply mappings.
active_directory_sync.users.empty = No sync records yet. Configure LDAP in Settings and click Sync now.
active_directory_sync.users.col.ad_identifier = AD Identifier
active_directory_sync.users.col.username = Username
active_directory_sync.users.col.display_name = Display Name
active_directory_sync.users.col.extension = Extension
active_directory_sync.users.col.status = Status
active_directory_sync.users.col.result = Last Result
active_directory_sync.users.col.last_sync = Last Sync
active_directory_sync.users.select.page_selected = All %d rows on this page are selected.
active_directory_sync.users.select.select_all_matching = Select all %d users matching the filter
active_directory_sync.users.select.all_selected = All %d users matching the filter are selected.
active_directory_sync.users.select.clear = Clear Selection
active_directory_sync.status.new_pending_create = Pending Create
active_directory_sync.status.synced = Synced
active_directory_sync.status.updated = Updated
active_directory_sync.status.conflict = Conflict
active_directory_sync.status.disabled_by_ad_removal = Disabled (AD)
active_directory_sync.status.decoupled = Decoupled
active_directory_sync.sync.error.extension_exists_manual = Extension {0} exists as a manual PBX extension. Decouple it first, delete it, or use Re-link after decouple.
active_directory_sync.sync.result.relinked = Re-linked to PBX extension (directory-managed again).
active_directory_sync.status.error = Error
active_directory_sync.status.extension_missing = Extension Deleted
active_directory_sync.sync.success = Sync finished. LDAP entries: {0}. Created: {1}, Updated: {2}, Disabled: {3}, Re-enabled: {4}, Conflicts: {5}, Errors: {6}. {7}
active_directory_sync.sync.dry_run_yes = Test run — PBX was not changed.
active_directory_sync.sync.dry_run_no = Extensions were written to the PBX database.
active_directory_sync.sync.apply_pending = Click Apply All Changes to activate them in Asterisk.
active_directory_sync.sync.error.config = LDAP settings are incomplete.
active_directory_sync.sync.error.ldap_fetch = LDAP user search failed.
active_directory_sync.sync.error.required_fields = Missing required mapped fields (extension, username, or display name).
active_directory_sync.sync.error.invalid_extension = Extension "{0}" is not a valid PBX extension (digits only). ForumSys uids like "einstein" cannot become extensions — use MS AD telephoneNumber or numeric uids for POC.
active_directory_sync.sync.error.extension_owned = Extension {0} is assigned to another AD user ({1}).
active_directory_sync.sync.error.extension_exists = Extension {0} already exists in the PBX outside AD sync.
active_directory_sync.sync.error.license_limit = Extension license limit reached.
active_directory_sync.sync.result.created = Extension and device created.
active_directory_sync.sync.result.updated = Extension updated from AD.
active_directory_sync.sync.warning.department_invalid = Could not assign department "{0}": {1}
active_directory_sync.mapping.department.hint = Department is linked to {0} (not free text). If the AD department name is new, sync creates it in that list and assigns the extension.
active_directory_sync.mapping.department.link = System General → Company
active_directory_sync.sync.result.unchanged = No changes detected.
active_directory_sync.sync.result.would_create = Would create extension (test run — no changes made).
active_directory_sync.sync.result.removed_from_ad = User no longer returned by LDAP; extension soft-disabled.
active_directory_sync.sync.action.conflict = Resolve extension conflict manually.
active_directory_sync.mapping.hint = Map Active Directory LDAP attributes to CompletePBX extension fields. Required rows are marked with *.
active_directory_sync.mapping.field.username = Username
active_directory_sync.mapping.field.display_name = Display Name
active_directory_sync.mapping.field.email = Email
active_directory_sync.mapping.field.mobile = Mobile
active_directory_sync.mapping.field.first_name = First Name
active_directory_sync.mapping.field.last_name = Last Name
active_directory_sync.mapping.field.department = Department
active_directory_sync.mapping.field.job_title = Job Title
active_directory_sync.error.mapping_required = AD attribute is required for {0}.
active_directory_sync.error.mapping_row_missing = Field mapping row for {0} is missing.
active_directory_sync.error.mapping_invalid_id = Invalid field mapping row submitted.
active_directory_sync.error.mapping_ad_attribute = Invalid AD attribute name: {0}
active_directory_sync.error.mapping_length = AD attribute value is too long.
active_directory_sync.settings.sync_direction = Sync direction: Active Directory → CompletePBX.
active_directory_sync.settings.connection = Connection
active_directory_sync.settings.authentication = Authentication
active_directory_sync.settings.policy = Sync Policy
active_directory_sync.settings.poc = POC (ForumSys)
active_directory_sync.tls.ldap = LDAP
active_directory_sync.tls.starttls = LDAP with TLS
active_directory_sync.tls.ldaps = LDAPS
active_directory_sync.field.ldap_tls_mode = LDAP Mode
active_directory_sync.field.ldap_tls_mode.tooltip = Connection security: LDAP (plain), LDAP with TLS (StartTLS), or LDAPS.
active_directory_sync.field.server_address = Server Address
active_directory_sync.field.server_address.tooltip = LDAP host name or IP address.
active_directory_sync.field.port = Port
active_directory_sync.field.port.tooltip = Default 389 for LDAP / StartTLS, 636 for LDAPS.
active_directory_sync.field.base_dn = Base DN
active_directory_sync.field.base_dn.tooltip = LDAP search base for users.
active_directory_sync.field.bind_username = Bind DN / Username
active_directory_sync.field.bind_username.tooltip = LDAP bind identity. Active Directory often uses a full DN (e.g. cn=service,dc=corp,dc=local).
active_directory_sync.field.bind_password = Bind Password
active_directory_sync.field.bind_password.tooltip = Password for the LDAP bind account.
active_directory_sync.field.extension_source_attr = Extension Source Attribute
active_directory_sync.field.extension_source_attr.tooltip = AD attribute used as extension number.
active_directory_sync.field.user_filter = User Filter (optional)
active_directory_sync.field.user_filter.tooltip = LDAP filter to limit imported users, e.g. (uid=*).
active_directory_sync.field.sync_interval_mins = Sync Interval
active_directory_sync.field.sync_interval_mins.tooltip = Interval between scheduled sync runs. The first sync starts at midnight.
active_directory_sync.field.sync_interval_mins.note_12h = Runs at 00:00 and 12:00, server local time.
active_directory_sync.field.sync_interval_mins.note_daily = Runs at 00:00 (midnight), server local time.
active_directory_sync.field.sync_enabled = Enable Scheduled Sync
active_directory_sync.field.sync_enabled.tooltip = When enabled, the scheduled sync timer runs automatically at the configured interval. Test Sync always runs as a test run regardless of this setting.
active_directory_sync.field.sync_device_type = Device Type
active_directory_sync.field.sync_device_type.tooltip = Type of device created for new extensions during sync. Applies only to new extensions; existing devices are not changed.
active_directory_sync.device_type.sip = SIP
active_directory_sync.device_type.iax = IAX
active_directory_sync.device_type.cloudphone = Cloudphone
active_directory_sync.device_type.desktop = Desktop
active_directory_sync.device_type.none = None (extension only)
active_directory_sync.button.save = Save
active_directory_sync.button.test_connection = Test Connection
active_directory_sync.button.test_sync = Test Sync
active_directory_sync.button.load_forumsys = Load ForumSys POC Defaults
active_directory_sync.forumsys.hint = ForumSys public LDAP: ldap.forumsys.com, base dc=example,dc=com, bind cn=read-only-admin,dc=example,dc=com / password. Use extension attribute uid for POC.
active_directory_sync.forumsys.loaded = ForumSys POC settings saved. Use Test sync to verify LDAP access and preview users.
active_directory_sync.test.started_title = Test started
active_directory_sync.test.started_message = Running a dry-run sync in the background. Results will appear in AD Users → Users when complete.
active_directory_sync.test.sync_queued = Test sync is running in the background — view progress in
active_directory_sync.test.sync_tab_link = Active Directory Users → Sync
active_directory_sync.test.connection_title = LDAP connection
active_directory_sync.test.auth_ok = LDAP connection and authentication successful.
active_directory_sync.test.success = LDAP connection, authentication, and search OK. Sample search matched {0} entries.
active_directory_sync.test.success_limited = LDAP connection, authentication, and search OK. The sample search hit the configured limit of {0} entries (increase Max hits to see more).
active_directory_sync.test.error.connection_unreachable = Could not reach LDAP server at {0}:{1}. Check the server address, port, firewall, and TLS mode.
active_directory_sync.test.error.connection_tls = Could not establish a secure LDAP connection to {0}:{1}. StartTLS failed: {2}
active_directory_sync.test.error.invalid_credentials = Authentication failed: invalid bind username or password.
active_directory_sync.test.error.invalid_bind_dn = Authentication failed: bind username is not a valid LDAP distinguished name.
active_directory_sync.test.error.bind_failed = LDAP authentication failed: {0}
active_directory_sync.test.error.invalid_base_dn = LDAP search failed: Base DN was not found or is invalid.
active_directory_sync.test.error.search_failed = LDAP search failed: {0}
active_directory_sync.users.count = Synced users in database: {0}
active_directory_sync.mapping.pbx_field = PBX Field
active_directory_sync.mapping.ad_attribute = AD Attribute
active_directory_sync.error.server_address = Server address is required.
active_directory_sync.error.port = Port must be between 1 and 65535.
active_directory_sync.error.base_dn = Base DN is required.
active_directory_sync.error.bind_username = Bind username is required.
active_directory_sync.error.bind_password = Bind password is required.
active_directory_sync.error.extension_source_attr = Extension source attribute is required.
active_directory_sync.error.ldap_tls_mode = Invalid LDAP TLS mode.
active_directory_sync.error.ldap_extension = PHP LDAP extension is not available.
active_directory_sync.error.ldap_connect = Could not connect to LDAP server.
active_directory_sync.error.ldap_starttls = StartTLS failed: {0}
active_directory_sync.error.ldap_bind = LDAP bind failed: {0}
active_directory_sync.error.ldap_search = LDAP search failed: {0}
active_directory_sync.settings.advanced = Advanced
active_directory_sync.advanced.param = Setting
active_directory_sync.advanced.value = Value
active_directory_sync.advanced.hint = Advanced sync settings as key/value pairs. Allowed keys: {0}.
active_directory_sync.error.advanced_unknown_key = Unknown advanced setting "{0}". Allowed keys: {1}.
active_directory_sync.error.advanced_duplicate_key = Duplicate advanced setting "{0}".
active_directory_sync.error.advanced_value_numeric = Advanced setting "{0}" must be a whole number.
active_directory_sync.field.batch_size = Batch Size
active_directory_sync.field.batch_size.tooltip = Number of LDAP entries processed per cycle. Reserved for future use; the default (100) is fine.
active_directory_sync.field.max_hits = Max Hits
active_directory_sync.field.max_hits.tooltip = Maximum number of LDAP results per search. 0 means unlimited.
active_directory_sync.error.base_dn_length = Base DN must be 255 characters or fewer.
active_directory_sync.error.user_filter_length = User filter must be 255 characters or fewer.
