code:
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Class to represent extended profile data
 */
class ExtendedProfile
{
    protected $fields;

    /**
     * Constructor
     *
     * @param Profile $profile
     * @throws NoSuchUserException
     */
    public function __construct(Profile $profile)
    {
        $this->profile = $profile;
        $this->user = $profile->getUser();
        $this->fields = $this->loadFields();
        $this->sections = $this->getSections();
        //common_debug(var_export($this->sections, true));

        //common_debug(var_export($this->fields, true));
    }

    /**
     * Load extended profile fields
     *
     * @return array $fields the list of fields
     * @throws Exception
     */
    public function loadFields()
    {
        $detail = new Profile_detail();
        $detail->profile_id = $this->profile->getID();
        $detail->find();

        $fields = [];

        while ($detail->fetch()) {
            $fields[$detail->field_name][] = clone($detail);
        }

        return $fields;
    }

    /**
     * Get a the self-tags associated with this profile
     *
     * @return string the concatenated string of tags
     */
    public function getTags()
    {
        return implode(' ', Profile_tag::getSelfTagsArray($this->profile));
    }

    /**
     * Return a simple string value. Checks for fields that should
     * be stored in the regular profile and returns values from it
     * if appropriate.
     *
     * @param string $name name of the detail field to get the
     *                     value from
     *
     * @return string the value
     */
    public function getTextValue($name)
    {
        $key = strtolower($name);
        $profileFields = array('fullname', 'location', 'bio');

        if (in_array($key, $profileFields)) {
            return $this->profile->$name;
        } elseif (array_key_exists($key, $this->fields)) {
            return $this->fields[$key][0]->field_value;
        } else {
            return null;
        }
    }

    public function getDateValue($name)
    {
        $key = strtolower($name);
        if (array_key_exists($key, $this->fields)) {
            return $this->fields[$key][0]->date;
        } else {
            return null;
        }
    }

    // XXX: getPhones, getIms, and getWebsites pretty much do the same thing,
    //      so refactor.
    public function getPhones()
    {
        $phones = (isset($this->fields['phone'])) ? $this->fields['phone'] : null;
        $pArrays = [];

        if (empty($phones)) {
            $pArrays[] = array(
                // TRANS: Field label for extended profile properties.
                'label' => _m('Phone'),
                'index' => 0,
                'type' => 'phone',
                'vcard' => 'tel',
                'rel' => 'office',
                'value' => null
            );
        } else {
            for ($i = 0; $i < sizeof($phones); $i++) {
                $pa = array(
                    // TRANS: Field label for extended profile properties.
                    'label' => _m('Phone'),
                    'type' => 'phone',
                    'index' => intval($phones[$i]->value_index),
                    'rel' => $phones[$i]->rel,
                    'value' => $phones[$i]->field_value,
                    'vcard' => 'tel'
                );

                $pArrays[] = $pa;
            }
        }
        return $pArrays;
    }

    public function getIms()
    {
        $ims = (isset($this->fields['im'])) ? $this->fields['im'] : null;
        $iArrays = [];

        if (empty($ims)) {
            $iArrays[] = array(
                // TRANS: Field label for extended profile properties (Instant Messaging).
                'label' => _m('IM'),
                'type' => 'im'
            );
        } else {
            for ($i = 0; $i < sizeof($ims); $i++) {
                $ia = array(
                    // TRANS: Field label for extended profile properties (Instant Messaging).
                    'label' => _m('IM'),
                    'type' => 'im',
                    'index' => intval($ims[$i]->value_index),
                    'rel' => $ims[$i]->rel,
                    'value' => $ims[$i]->field_value,
                );

                $iArrays[] = $ia;
            }
        }
        return $iArrays;
    }

    public function getWebsites()
    {
        $sites = (isset($this->fields['website'])) ? $this->fields['website'] : null;
        $wArrays = [];

        if (empty($sites)) {
            $wArrays[] = array(
                // TRANS: Field label for extended profile properties.
                'label' => _m('Website'),
                'type' => 'website'
            );
        } else {
            for ($i = 0; $i < sizeof($sites); $i++) {
                $wa = array(
                    // TRANS: Field label for extended profile properties.
                    'label' => _m('Website'),
                    'type' => 'website',
                    'index' => intval($sites[$i]->value_index),
                    'rel' => $sites[$i]->rel,
                    'value' => $sites[$i]->field_value,
                );

                $wArrays[] = $wa;
            }
        }
        return $wArrays;
    }

    public function getExperiences()
    {
        $companies = (isset($this->fields['company'])) ? $this->fields['company'] : null;
        $start = (isset($this->fields['start'])) ? $this->fields['start'] : null;
        $end = (isset($this->fields['end'])) ? $this->fields['end'] : null;

        $eArrays = [];

        if (empty($companies)) {
            $eArrays[] = array(
                // TRANS: Field label for extended profile properties.
                'label' => _m('Employer'),
                'type' => 'experience',
                'company' => null,
                'start' => null,
                'end' => null,
                'current' => false,
                'index' => 0
            );
        } else {
            for ($i = 0; $i < sizeof($companies); $i++) {
                $ea = array(
                    // TRANS: Field label for extended profile properties.
                    'label' => _m('Employer'),
                    'type' => 'experience',
                    'company' => $companies[$i]->field_value,
                    'index' => intval($companies[$i]->value_index),
                    'current' => $end[$i]->rel,
                    'start' => $start[$i]->date,
                    'end' => $end[$i]->date
                );
                $eArrays[] = $ea;
            }
        }
        return $eArrays;
    }

    public function getEducation()
    {
        $schools = (isset($this->fields['school'])) ? $this->fields['school'] : null;
        $degrees = (isset($this->fields['degree'])) ? $this->fields['degree'] : null;
        $descs = (isset($this->fields['degree_descr'])) ? $this->fields['degree_descr'] : null;
        $start = (isset($this->fields['school_start'])) ? $this->fields['school_start'] : null;
        $end = (isset($this->fields['school_end'])) ? $this->fields['school_end'] : null;
        $iArrays = [];

        if (empty($schools)) {
            $iArrays[] = array(
                'type' => 'education',
                // TRANS: Field label for extended profile properties.
                'label' => _m('Institution'),
                'school' => null,
                'degree' => null,
                'description' => null,
                'start' => null,
                'end' => null,
                'index' => 0
            );
        } else {
            for ($i = 0; $i < sizeof($schools); $i++) {
                $ia = array(
                    'type' => 'education',
                    // TRANS: Field label for extended profile properties.
                    'label' => _m('Institution'),
                    'school' => $schools[$i]->field_value,
                    'degree' => isset($degrees[$i]->field_value) ? $degrees[$i]->field_value : null,
                    'description' => isset($descs[$i]->field_value) ? $descs[$i]->field_value : null,
                    'index' => intval($schools[$i]->value_index),
                    'start' => $start[$i]->date,
                    'end' => $end[$i]->date
                );
                $iArrays[] = $ia;
            }
        }

        return $iArrays;
    }

    /**
     *  Return all the sections of the extended profile
     *
     * @return array the big list of sections and fields
     * @throws Exception
     */
    public function getSections()
    {
        $display_extra = false;
        $gsefields = GNUsocialProfileExtensionField::allFields();
        $extra_fields = [];
        gnusocial_profile_merge($this->profile);
        foreach ($gsefields as $field) {
            $display_extra = true;
            $field_key = $field->systemname;
            switch ($field->type) {
                case 'text':
                    $extra_fields[$field_key]['type'] = 'custom-textarea';
                    break;
                case 'str':
                default:
                    $extra_fields[$field_key]['type'] = 'custom-text';
                    break;
            }
            $extra_fields[$field_key]['label'] = $field->title;
            $extra_fields[$field_key]['value'] = $this->profile->$field_key;
        }

        $sections = [
            'basic' => [
                // TRANS: Field label for extended profile properties.
                'label' => _m('Personal'),
                'fields' => [
                    'fullname' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Full name'),
                        'profile' => 'fullname',
                        'vcard' => 'fn',
                    ],
                    'title' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Title'),
                        'vcard' => 'title',
                    ],
                    'manager' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Manager'),
                        'type' => 'person',
                        'vcard' => 'x-manager',
                    ],
                    'location' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Location'),
                        'profile' => 'location'
                    ],
                    'bio' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Bio'),
                        'type' => 'textarea',
                        'profile' => 'bio',
                    ],
                    'tags' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Tags'),
                        'type' => 'tags',
                        'profile' => 'tags',
                    ],
                ],
            ],
            'contact' => [
                // TRANS: Field label for extended profile properties.
                'label' => _m('Contact'),
                'fields' => [
                    'phone' => $this->getPhones(),
                    'im' => $this->getIms(),
                    'website' => $this->getWebsites()
                ],
            ],
            'personal' => [
                // TRANS: Field label for extended profile properties.
                'label' => _m('Personal'),
                'fields' => [
                    'birthday' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Birthday'),
                        'type' => 'date',
                        'vcard' => 'bday',
                    ],
                    'spouse' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Spouse\'s name'),
                        'vcard' => 'x-spouse',
                    ],
                    'kids' => [
                        // TRANS: Field label for extended profile properties.
                        'label' => _m('Kids\' names')
                    ],
                ],
            ],
            'experience' => [
                // TRANS: Field label for extended profile properties.
                'label' => _m('Work experience'),
                'fields' => [
                    'experience' => $this->getExperiences()
                ],
            ],
            'education' => [
                // TRANS: Field label for extended profile properties.
                'label' => _m('Education'),
                'fields' => [
                    'education' => $this->getEducation()
                ],
            ],
        ];
        if ($display_extra) {
            $sections['extra'] = [
                'label' => _m('Additional information'),
                'fields' => $extra_fields,
            ];
        }
        return $sections;
    }
}


code:
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Class for outputting a widget to display or edit
 * extended profiles
 */
class ExtendedProfileWidget extends Form
{
    const EDITABLE = true;

    /**
     * The parent profile
     *
     * @var Profile
     */
    protected $profile;

    /**
     * The extended profile
     *
     * @var ExtendedProfile
     */
    protected $ext;

    /**
     * Constructor
     *
     * @param Action $out
     * @param Profile $profile
     * @param boolean $editable
     * @throws NoSuchUserException
     */
    public function __construct(Action $out = null, Profile $profile = null, $editable = false)
    {
        parent::__construct($out);

        $this->profile = $profile;
        $this->ext = new ExtendedProfile($this->profile);

        $this->editable = $editable;
    }

    /**
     * Show the extended profile, or the edit form
     */
    public function show()
    {
        if ($this->editable) {
            parent::show();
        } else {
            $this->showSections();
        }
    }

    /**
     * Show form data
     */
    public function formData()
    {
        // For JQuery UI modal dialog
        $this->out->elementStart(
            'div',
            // TRANS: Title for extended profile entry deletion dialog.
            array('id' => 'confirm-dialog', 'title' => _m('Confirmation Required'))
        );
        // TRANS: Confirmation text for extended profile entry deletion dialog.
        $this->out->text(_m('Really delete this entry?'));
        $this->out->elementEnd('div');
        $this->showSections();
    }

    /**
     * Show each section of the extended profile
     */
    public function showSections()
    {
        $sections = $this->ext->getSections();
        foreach ($sections as $name => $section) {
            $this->showExtendedProfileSection($name, $section);
        }
    }

    /**
     * Show an extended profile section
     *
     * @param string $name name of the section
     * @param array $section array of fields for the section
     * @throws Exception
     */
    protected function showExtendedProfileSection($name, $section)
    {
        $this->out->element('h3', null, $section['label']);
        $this->out->elementStart('table', array('class' => 'extended-profile'));

        foreach ($section['fields'] as $fieldName => $field) {
            switch ($fieldName) {
                case 'phone':
                case 'im':
                case 'website':
                case 'experience':
                case 'education':
                    $this->showMultiple($fieldName, $field);
                    break;
                default:
                    $this->showExtendedProfileField($fieldName, $field);
            }
        }
        $this->out->elementEnd('table');
    }

    /**
     * Show an extended profile field
     *
     * @param string $name name of the field
     * @param array $field set of key/value pairs for the field
     * @throws Exception
     */
    protected function showExtendedProfileField($name, $field)
    {
        $this->out->elementStart('tr');

        $this->out->element('th', str_replace(' ', '_', strtolower($field['label'])), $field['label']);

        $this->out->elementStart('td');
        if ($this->editable) {
            $this->showEditableField($name, $field);
        } else {
            $this->showFieldValue($name, $field);
        }
        $this->out->elementEnd('td');

        $this->out->elementEnd('tr');
    }

    protected function showMultiple($name, $fields)
    {
        foreach ($fields as $field) {
            $this->showExtendedProfileField($name, $field);
        }
    }

    // XXX: showPhone, showIm and showWebsite all work the same, so
    //      combine
    protected function showPhone($name, $field)
    {
        $this->out->elementStart('div', array('class' => 'phone-display'));
        if (!empty($field['value'])) {
            $this->out->text($field['value']);
            if (!empty($field['rel'])) {
                // TRANS: Value between parentheses (phone number, website, or IM address).
                $outtext = sprintf(_m('(%s)'), $field['rel']);
                $this->out->text(' ' . $outtext);
            }
        }
        $this->out->elementEnd('div');
    }

    protected function showIm($name, $field)
    {
        $this->out->elementStart('div', array('class' => 'im-display'));
        $this->out->text($field['value']);
        if (!empty($field['rel'])) {
            // TRANS: Value between parentheses (phone number, website, or IM address).
            $outtext = sprintf(_m('(%s)'), $field['rel']);
            $this->out->text(' ' . $outtext);
        }
        $this->out->elementEnd('div');
    }

    protected function showWebsite($name, $field)
    {
        $this->out->elementStart('div', array('class' => 'website-display'));

        $url = $field['value'];

        $this->out->element(
            "a",
            array(
                'href' => $url,
                'class' => 'extended-profile-link',
                'target' => "_blank"
            ),
            $url
        );

        if (!empty($field['rel'])) {
            // TRANS: Value between parentheses (phone number, website, or IM address).
            $outtext = sprintf(_m('(%s)'), $field['rel']);
            $this->out->text(' ' . $outtext);
        }
        $this->out->elementEnd('div');
    }

    protected function showEditableIm($name, $field)
    {
        $index = isset($field['index']) ? $field['index'] : 0;
        $id = "extprofile-$name-$index";
        $rel = $id . '-rel';
        $this->out->elementStart(
            'div',
            array(
                'id' => $id . '-edit',
                'class' => 'im-item'
            )
        );
        $this->out->input(
            $id,
            null,
            isset($field['value']) ? $field['value'] : null
        );
        $this->out->dropdown(
            $id . '-rel',
            'Type',
            array(
                'jabber' => 'Jabber',
                'gtalk' => 'GTalk',
                'aim' => 'AIM',
                'yahoo' => 'Yahoo! Messenger',
                'msn' => 'MSN',
                'skype' => 'Skype',
                'other' => 'Other'
            ),
            null,
            false,
            isset($field['rel']) ? $field['rel'] : null
        );

        $this->showMultiControls();
        $this->out->elementEnd('div');
    }

    protected function showEditablePhone($name, $field)
    {
        $index = isset($field['index']) ? $field['index'] : 0;
        $id = "extprofile-$name-$index";
        $rel = $id . '-rel';
        $this->out->elementStart(
            'div',
            array(
                'id' => $id . '-edit',
                'class' => 'phone-item'
            )
        );
        $this->out->input(
            $id,
            null,
            isset($field['value']) ? $field['value'] : null
        );
        $this->out->dropdown(
            $id . '-rel',
            'Type',
            array(
                'office' => 'Office',
                'mobile' => 'Mobile',
                'home' => 'Home',
                'pager' => 'Pager',
                'other' => 'Other'
            ),
            null,
            false,
            isset($field['rel']) ? $field['rel'] : null
        );

        $this->showMultiControls();
        $this->out->elementEnd('div');
    }

    protected function showEditableWebsite($name, $field)
    {
        $index = isset($field['index']) ? $field['index'] : 0;
        $id = "extprofile-$name-$index";
        $rel = $id . '-rel';
        $this->out->elementStart(
            'div',
            array(
                'id' => $id . '-edit',
                'class' => 'website-item'
            )
        );
        $this->out->input(
            $id,
            null,
            isset($field['value']) ? $field['value'] : null
        );
        $this->out->dropdown(
            $id . '-rel',
            'Type',
            array(
                'blog' => 'Blog',
                'homepage' => 'Homepage',
                'facebook' => 'Facebook',
                'linkedin' => 'LinkedIn',
                'flickr' => 'Flickr',
                'other' => 'Other',
                'twitter' => 'Twitter'
            ),
            null,
            false,
            isset($field['rel']) ? $field['rel'] : null
        );

        $this->showMultiControls();
        $this->out->elementEnd('div');
    }

    protected function showExperience($name, $field)
    {
        $this->out->elementStart('div', 'experience-item');
        // TRANS: Field label in experience area of extended profile.
        $this->out->element('div', 'label', _m('Company'));

        if (!empty($field['company'])) {
            $this->out->element('div', 'field', $field['company']);

            // TRANS: Field label in extended profile (when did one start a position or education).
            $this->out->element('div', 'label', _m('Start'));
            $this->out->element(
                'div',
                array('class' => 'field date'),
                date(
                    'j M Y',
                    strtotime($field['start'])
                )
            );
            // TRANS: Field label in extended profile (when did one end a position or education).
            $this->out->element('div', 'label', _m('End'));
            $this->out->element(
                'div',
                array('class' => 'field date'),
                date(
                    'j M Y',
                    strtotime($field['end'])
                )
            );

            if ($field['current']) {
                $this->out->element(
                    'div',
                    array('class' => 'field current'),
                    // TRANS: Field value in experience area of extended profile (one still holds a position).
                    _m('(Current)')
                );
            }
        }
        $this->out->elementEnd('div');
    }

    protected function showEditableExperience($name, $field)
    {
        $index = isset($field['index']) ? $field['index'] : 0;
        $id = "extprofile-$name-$index";
        $this->out->elementStart(
            'div',
            array(
                'id' => $id . '-edit',
                'class' => 'experience-item'
            )
        );

        // TRANS: Field label in experience edit area of extended profile (which company does one work for).
        $this->out->element('div', 'label', _m('Company'));
        $this->out->input(
            $id,
            null,
            isset($field['company']) ? $field['company'] : null
        );

        // TRANS: Field label in extended profile (when did one start a position or education).
        $this->out->element('div', 'label', _m('Start'));
        $this->out->input(
            $id . '-start',
            null,
            isset($field['start']) ? date('j M Y', strtotime($field['start'])) : null
        );

        // TRANS: Field label in extended profile (when did one end a position or education).
        $this->out->element('div', 'label', _m('End'));

        $this->out->input(
            $id . '-end',
            null,
            isset($field['end']) ? date('j M Y', strtotime($field['end'])) : null
        );
        $this->out->hidden(
            $id . '-current',
            'false'
        );
        $this->out->elementStart('div', 'current-checkbox');
        $this->out->checkbox(
            $id . '-current',
            // TRANS: Checkbox label in experience edit area of extended profile (one still works at a company).
            _m('Current'),
            $field['current']
        );
        $this->out->elementEnd('div');

        $this->showMultiControls();
        $this->out->elementEnd('div');
    }

    protected function showEducation($name, $field)
    {
        $this->out->elementStart('div', 'education-item');
        // TRANS: Field label in education area of extended profile.
        $this->out->element('div', 'label', _m('Institution'));
        if (!empty($field['school'])) {
            $this->out->element('div', 'field', $field['school']);
            // TRANS: Field label in extended profile for specifying an academic degree.
            $this->out->element('div', 'label', _m('Degree'));
            $this->out->element('div', 'field', $field['degree']);
            // TRANS: Field label in education area of extended profile.
            $this->out->element('div', 'label', _m('Description'));
            $this->out->element('div', 'field', $field['description']);
            // TRANS: Field label in extended profile (when did one start a position or education).
            $this->out->element('div', 'label', _m('Start'));
            $this->out->element(
                'div',
                array('class' => 'field date'),
                date(
                    'j M Y',
                    strtotime($field['start'])
                )
            );
            // TRANS: Field label in extended profile (when did one end a position or education).
            $this->out->element('div', 'label', _m('End'));
            $this->out->element(
                'div',
                array('class' => 'field date'),
                date(
                    'j M Y',
                    strtotime($field['end'])
                )
            );
        }
        $this->out->elementEnd('div');
    }

    protected function showEditableEducation($name, $field)
    {
        $index = isset($field['index']) ? $field['index'] : 0;
        $id = "extprofile-$name-$index";
        $this->out->elementStart(
            'div',
            array(
                'id' => $id . '-edit',
                'class' => 'education-item'
            )
        );
        // TRANS: Field label in education edit area of extended profile.
        $this->out->element('div', 'label', _m('Institution'));
        $this->out->input(
            $id,
            null,
            isset($field['school']) ? $field['school'] : null
        );

        // TRANS: Field label in extended profile for specifying an academic degree.
        $this->out->element('div', 'label', _m('Degree'));
        $this->out->input(
            $id . '-degree',
            null,
            isset($field['degree']) ? $field['degree'] : null
        );

        // TRANS: Field label in education edit area of extended profile.
        $this->out->element('div', 'label', _m('Description'));

        $this->out->textarea(
            $id . '-description',
            null,
            isset($field['description']) ? $field['description'] : null
        );

        // TRANS: Field label in extended profile (when did one start a position or education).
        $this->out->element('div', 'label', _m('Start'));
        $this->out->input(
            $id . '-start',
            null,
            // @todo FIXME: does date format need i18n? If so, should probly be dealt with in core.
            isset($field['start']) ? date('j M Y', strtotime($field['start'])) : null
        );

        // TRANS: Field label in extended profile (when did one end a position or education).
        $this->out->element('div', 'label', _m('End'));
        $this->out->input(
            $id . '-end',
            null,
            // @todo FIXME: does date format need i18n? If so, should probly be dealt with in core.
            isset($field['end']) ? date('j M Y', strtotime($field['end'])) : null
        );

        $this->showMultiControls();
        $this->out->elementEnd('div');
    }

    public function showMultiControls()
    {
        $this->out->element(
            'a',
            array(
                'class' => 'remove_row',
                'href' => 'javascript://',
                'style' => 'display: none;'
            ),
            '-'
        );

        $this->out->element(
            'a',
            array(
                'class' => 'add_row',
                'href' => 'javascript://',
                'style' => 'display: none;'
            ),
            // TRANS: Link description in extended profile page to add another profile element.
            _m('Add another item')
        );
    }

    /**
     * Outputs the value of a field
     *
     * @param string $name name of the field
     * @param array $field set of key/value pairs for the field
     */
    protected function showFieldValue($name, $field)
    {
        $type = strval(@$field['type']);

        switch ($type) {
            case '':
            case 'text':
            case 'textarea':
            case 'person':
                $this->out->text($this->ext->getTextValue($name));
                break;
            case 'custom-text':
            case 'custom-textarea':
                $this->out->text(isset($field['value']) ? $field['value'] : null);
                break;
            case 'date':
                $value = $this->ext->getDateValue($name);
                if (!empty($value)) {
                    $this->out->element(
                        'div',
                        array('class' => 'field date'),
                        date('j M Y', strtotime($value))
                    );
                }
                break;
            case 'tags':
                $this->out->text($this->ext->getTags());
                break;
            case 'phone':
                $this->showPhone($name, $field);
                break;
            case 'website':
                $this->showWebsite($name, $field);
                break;
            case 'im':
                $this->showIm($name, $field);
                break;
            case 'experience':
                $this->showExperience($name, $field);
                break;
            case 'education':
                $this->showEducation($name, $field);
                break;
            default:
                $this->out->text("TYPE: $type");
        }
    }

    /**
     * Show an editable version of the field
     *
     * @param string $name name fo the field
     * @param array $field array of key/value pairs for the field
     * @throws Exception
     */
    protected function showEditableField($name, $field)
    {
        $out = $this->out;

        $type = strval(@$field['type']);
        $id = "extprofile-" . $name;

        $value = 'placeholder';

        switch ($type) {
            case '':
            case 'text':
            case 'person':
                $out->input($id, null, $this->ext->getTextValue($name));
                break;
            case 'custom-text':
            case 'custom-textarea':
                $out->input($id, null, isset($field['value']) ? $field['value'] : null);
                break;
            case 'date':
                $value = $this->ext->getDateValue($name);
                $out->input(
                    $id,
                    null,
                    empty($value) ? null : date('j M Y', strtotime($value))
                );
                break;
            case 'textarea':
                $out->textarea($id, null, $this->ext->getTextValue($name));
                break;
            case 'tags':
                $out->input($id, null, $this->ext->getTags());
                break;
            case 'phone':
                $this->showEditablePhone($name, $field);
                break;
            case 'im':
                $this->showEditableIm($name, $field);
                break;
            case 'website':
                $this->showEditableWebsite($name, $field);
                break;
            case 'experience':
                $this->showEditableExperience($name, $field);
                break;
            case 'education':
                $this->showEditableEducation($name, $field);
                break;
            default:
                // TRANS: Field label for undefined field in extended profile.
                $out->input($id, null, sprintf(_m('TYPE: %s'), $type));
        }
    }

    /**
     * Action elements
     *
     * @return void
     * @throws Exception
     */
    public function formActions()
    {
        $this->out->submit(
            'save',
            // TRANS: Button text for saving extended profile properties.
            _m('BUTTON', 'Save'),
            'submit form_action-secondary',
            'save',
            // TRANS: .
            // TRANS: Button title for saving extended profile properties.
            _m('Save details')
        );
    }

    /**
     * ID of the form
     *
     * @return string ID of the form
     */
    public function id()
    {
        return 'profile-details-' . $this->profile->id;
    }

    /**
     * class of the form
     *
     * @return string of the form class
     */
    public function formClass()
    {
        return 'form_profile_details form_settings';
    }

    /**
     * Action of the form
     *
     * @return string URL of the action
     */
    public function action()
    {
        return common_local_url('profiledetailsettings');
    }
}

repo_name: spookie/gnu

license: mit


code:
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Allows administrators to define additional profile fields for the users of a GNU social installation.
 *
 * @category  Widget
 * @package   GNU social
 * @author    Max Shinn <trombonechamp@gmail.com>
 * @author    Diogo Cordeiro <diogo@fc.up.pt>
 * @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

defined('GNUSOCIAL') || die();

function gnusocial_profile_merge(&$profile)
{
    $responses = GNUsocialProfileExtensionResponse::findResponsesByProfile($profile->id);
    $profile->customfields = [];
    foreach ($responses as $response) {
        $title = $response->systemname;
        $profile->$title = $response->value;
        $profile->customfields[] = $title;
    }
}

function gnusocial_field_systemname_validate($systemname)
{
    // Ensure it doesn't exist already
    $fields = GNUsocialProfileExtensionField::allFields();
    foreach ($fields as $field) {
        if ($field->systemname == $systemname) {
            return false;
        }
    }
    // Ensure that it consist of only alphanumeric characters
    return ctype_alnum($systemname);
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-14 15:07+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANS: Module description.
#: ExtendedProfileModule.php:46
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfileModule.php:100
msgid "More details..."
msgstr ""

#. TRANS: Extended profile plugin menu item on user settings page.
#: ExtendedProfileModule.php:119
msgctxt "MENU"
msgid "Full Profile"
msgstr ""

#. TRANS: Extended profile plugin tooltip for user settings menu item.
#: ExtendedProfileModule.php:121
msgid "Change your extended profile settings"
msgstr ""

#: ExtendedProfileModule.php:206
msgid "Profile Fields"
msgstr ""

#: ExtendedProfileModule.php:207
msgid "Custom profile fields"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:123 lib/extendedprofile.php:134
msgid "Phone"
msgstr ""

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:156 lib/extendedprofile.php:163
msgid "IM"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:184 lib/extendedprofile.php:191
msgid "Website"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:215 lib/extendedprofile.php:227
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:254 lib/extendedprofile.php:267
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:471
msgid "Institution"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:313 lib/extendedprofile.php:362
msgid "Personal"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:317
msgid "Full name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:323 actions/profilefieldsadminpanel.php:180
msgid "Title"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:328
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:334
msgid "Location"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:339
msgid "Bio"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:345
msgid "Tags"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Contact"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Birthday"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:372
msgid "Spouse's name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:377
msgid "Kids' names"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:383
msgid "Work experience"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:390
msgid "Education"
msgstr ""

#: lib/extendedprofile.php:398
msgid "Additional information"
msgstr ""

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:85
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:88
msgid "Really delete this entry?"
msgstr ""

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:172 lib/extendedprofilewidget.php:185
#: lib/extendedprofilewidget.php:209
#, php-format
msgid "(%s)"
msgstr ""

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which company does one work for).
#: lib/extendedprofilewidget.php:331 lib/extendedprofilewidget.php:382
msgid "Company"
msgstr ""

#. TRANS: Field label in extended profile (when did one start a position or education).
#: lib/extendedprofilewidget.php:337 lib/extendedprofilewidget.php:390
#: lib/extendedprofilewidget.php:436 lib/extendedprofilewidget.php:496
msgid "Start"
msgstr ""

#. TRANS: Field label in extended profile (when did one end a position or education).
#: lib/extendedprofilewidget.php:347 lib/extendedprofilewidget.php:398
#: lib/extendedprofilewidget.php:446 lib/extendedprofilewidget.php:505
msgid "End"
msgstr ""

#. TRANS: Field value in experience area of extended profile (one still holds a position).
#: lib/extendedprofilewidget.php:362
msgid "(Current)"
msgstr ""

#. TRANS: Checkbox label in experience edit area of extended profile (one still works at a company).
#: lib/extendedprofilewidget.php:413
msgid "Current"
msgstr ""

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:430 lib/extendedprofilewidget.php:479
msgid "Degree"
msgstr ""

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:433 lib/extendedprofilewidget.php:487
#: actions/profilefieldsadminpanel.php:196
msgid "Description"
msgstr ""

#. TRANS: Link description in extended profile page to add another profile element.
#: lib/extendedprofilewidget.php:537
msgid "Add another item"
msgstr ""

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:652
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:667 actions/profilefieldsadminpanel.php:224
msgctxt "BUTTON"
msgid "Save"
msgstr ""

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:672
msgid "Save details"
msgstr ""

#. TRANS: Title for extended profile settings.
#. TRANS: %%site.name%% is the name of the site.
#: actions/profiledetailsettings.php:35
msgid "Extended profile settings"
msgstr ""

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:59
msgid "Unexpected form submission."
msgstr ""

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:108
msgid "Details saved."
msgstr ""

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:118
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:130
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:247
#, php-format
msgid "Invalid URL: %s."
msgstr ""

#. TRANS: Server error displayed when a field could not be saved in the database.
#: actions/profiledetailsettings.php:490 actions/profiledetailsettings.php:503
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:545
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:584
msgid "Could not save profile."
msgstr ""

#: actions/profilefieldsadminpanel.php:39
msgid "Profile fields"
msgstr ""

#: actions/profilefieldsadminpanel.php:49
msgid "GNU Social custom profile fields"
msgstr ""

#: actions/profilefieldsadminpanel.php:65
msgid ""
"Internal system name must be unique and consist of only alphanumeric "
"characters!"
msgstr ""

#: actions/profilefieldsadminpanel.php:75
msgid "There was an error with the field data."
msgstr ""

#: actions/profilefieldsadminpanel.php:87
msgid "Field not found."
msgstr ""

#: actions/profilefieldsadminpanel.php:140
msgid "New Profile Field"
msgstr ""

#: actions/profilefieldsadminpanel.php:149
msgid "Edit Profile Field"
msgstr ""

#: actions/profilefieldsadminpanel.php:153
msgid "Existing Custom Profile Fields"
msgstr ""

#: actions/profilefieldsadminpanel.php:182
msgid "The title of the field"
msgstr ""

#: actions/profilefieldsadminpanel.php:188
msgid "Internal name"
msgstr ""

#: actions/profilefieldsadminpanel.php:190
msgid ""
"The alphanumeric name used internally for this field.  Also the key used for "
"federation (e.g. ActivityPub and OStatus) user info."
msgstr ""

#: actions/profilefieldsadminpanel.php:198
msgid "An optional more detailed description of the field"
msgstr ""

#: actions/profilefieldsadminpanel.php:204
msgid "Type"
msgstr ""

#: actions/profilefieldsadminpanel.php:205
msgid "Text"
msgstr ""

#: actions/profilefieldsadminpanel.php:206
msgid "String"
msgstr ""

#: actions/profilefieldsadminpanel.php:207
msgid "The type of the datafield"
msgstr ""

#: actions/profilefieldsadminpanel.php:224
msgid "Save field"
msgstr ""

#: actions/profilefieldsadminpanel.php:226
msgctxt "BUTTON"
msgid "Remove"
msgstr ""

#: actions/profilefieldsadminpanel.php:226
msgid "Remove field"
msgstr ""

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:56
msgid "Edit"
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:75
msgid "Error creating new field."
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:73
msgid "Error creating new response."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Afrikaans (http://www.transifex.com/gnu-social/gnu-social/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:52
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit"
msgstr "Wysig"

#. TRANS: Title for extended profile settings.
#: actions/profiledetailsettings.php:29
msgid "Extended profile settings"
msgstr ""

#. TRANS: Usage instructions for profile settings.
#: actions/profiledetailsettings.php:40
msgid ""
"You can update your personal profile info here so people know more about "
"you."
msgstr ""

#. TRANS: Client error displayed when the session token does not match or is
#. not given.
#: actions/profiledetailsettings.php:63
msgid "There was a problem with your session token. Try again, please."
msgstr ""

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:74
msgid "Unexpected form submission."
msgstr "Die vorm is onverwags ingestuur."

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:137
msgid "Details saved."
msgstr ""

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:148
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:160
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:273
#, php-format
msgid "Invalid URL: %s."
msgstr ""

#. TRANS: Server error displayed when a field could not be saved in the
#. database.
#: actions/profiledetailsettings.php:522 actions/profiledetailsettings.php:535
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:580
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:622
msgid "Could not save profile."
msgstr "Kon nie die profiel stoor nie."

#. TRANS: Server error thrown when user profile settings tags could not be
#. saved.
#: actions/profiledetailsettings.php:630
msgid "Could not save tags."
msgstr "Kon nie die etikette stoor nie."

#. TRANS: Plugin description.
#: ExtendedProfilePlugin.php:40
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfilePlugin.php:87
msgid "More details..."
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:120 lib/extendedprofile.php:131
msgid "Phone"
msgstr ""

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:153 lib/extendedprofile.php:160
msgid "IM"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:181 lib/extendedprofile.php:188
msgid "Website"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:212 lib/extendedprofile.php:224
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:251 lib/extendedprofile.php:264
#: lib/extendedprofilewidget.php:416 lib/extendedprofilewidget.php:456
msgid "Institution"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:289 lib/extendedprofile.php:338
msgid "Personal"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:293
msgid "Full name"
msgstr "Volledige naam"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:299
msgid "Title"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:304
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:310
msgid "Location"
msgstr "Ligging"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:315
msgid "Bio"
msgstr "Bio"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:321
msgid "Tags"
msgstr "Etikette"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:329
msgid "Contact"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:342
msgid "Birthday"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:348
msgid "Spouse's name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Kids' names"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:359
msgid "Work experience"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Education"
msgstr ""

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr ""

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:169 lib/extendedprofilewidget.php:182
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr ""

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which
#. company does one work for).
#: lib/extendedprofilewidget.php:326 lib/extendedprofilewidget.php:372
msgid "Company"
msgstr ""

#. TRANS: Field label in extended profile (when did one start a position or
#. education).
#: lib/extendedprofilewidget.php:332 lib/extendedprofilewidget.php:380
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:481
msgid "Start"
msgstr ""

#. TRANS: Field label in extended profile (when did one end a position or
#. education).
#: lib/extendedprofilewidget.php:340 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:490
msgid "End"
msgstr ""

#. TRANS: Field value in experience area of extended profile (one still holds
#. a position).
#: lib/extendedprofilewidget.php:353
msgid "(Current)"
msgstr ""

#. TRANS: Checkbox label in experience edit area of extended profile (one
#. still works at a company).
#: lib/extendedprofilewidget.php:403
msgid "Current"
msgstr ""

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:420 lib/extendedprofilewidget.php:464
msgid "Degree"
msgstr ""

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:423 lib/extendedprofilewidget.php:472
msgid "Description"
msgstr "Beskrywing"

#. TRANS: Link description in extended profile page to add another profile
#. element.
#: lib/extendedprofilewidget.php:522
msgid "Add another item"
msgstr ""

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:633
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:647
msgctxt "BUTTON"
msgid "Save"
msgstr "Stoor"

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:652
msgid "Save details"
msgstr ""

#: actions/bio.php:62
#, php-format
msgid "%s's Bio."
msgstr ""

#: GNUsocialProfileExtensionsModule.php:124
msgid "Profile Fields"
msgstr ""

#: GNUsocialProfileExtensionsModule.php:125
msgid "Custom profile fields"
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:78
msgid "Error creating new response."
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:79
msgid "Error creating new field."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 14:33+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Arabic (http://www.transifex.com/gnu-social/gnu-social/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:52
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit"
msgstr "عدل"

#. TRANS: Title for extended profile settings.
#: actions/profiledetailsettings.php:29
msgid "Extended profile settings"
msgstr ""

#. TRANS: Usage instructions for profile settings.
#: actions/profiledetailsettings.php:40
msgid ""
"You can update your personal profile info here so people know more about "
"you."
msgstr "يمكن أن تحدث معلومات ملفك الشخصي ليعرف الناس عنك أكثر."

#. TRANS: Client error displayed when the session token does not match or is
#. not given.
#: actions/profiledetailsettings.php:63
msgid "There was a problem with your session token. Try again, please."
msgstr ""

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:74
msgid "Unexpected form submission."
msgstr ""

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:137
msgid "Details saved."
msgstr "حفظت التفاصيل."

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:148
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:160
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:273
#, php-format
msgid "Invalid URL: %s."
msgstr "مسار غير صالح: %s."

#. TRANS: Server error displayed when a field could not be saved in the
#. database.
#: actions/profiledetailsettings.php:522 actions/profiledetailsettings.php:535
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:580
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr "وسم غير صالح: \"%s\"."

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:622
msgid "Could not save profile."
msgstr "تعذر حفظ الملف الشخصي."

#. TRANS: Server error thrown when user profile settings tags could not be
#. saved.
#: actions/profiledetailsettings.php:630
msgid "Could not save tags."
msgstr "تعذّر حفظ الوسوم."

#. TRANS: Plugin description.
#: ExtendedProfilePlugin.php:40
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfilePlugin.php:87
msgid "More details..."
msgstr "مزيد من التفاصيل..."

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:120 lib/extendedprofile.php:131
msgid "Phone"
msgstr "الهاتف"

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:153 lib/extendedprofile.php:160
msgid "IM"
msgstr "المراسلة الفورية"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:181 lib/extendedprofile.php:188
msgid "Website"
msgstr "موقع الوب"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:212 lib/extendedprofile.php:224
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:251 lib/extendedprofile.php:264
#: lib/extendedprofilewidget.php:416 lib/extendedprofilewidget.php:456
msgid "Institution"
msgstr "المنشأة"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:289 lib/extendedprofile.php:338
msgid "Personal"
msgstr "معلومات شخصية"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:293
msgid "Full name"
msgstr "الاسم الكامل"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:299
msgid "Title"
msgstr "المُسمى"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:304
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:310
msgid "Location"
msgstr "المكان"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:315
msgid "Bio"
msgstr "السيرة"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:321
msgid "Tags"
msgstr "الوسوم"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:329
msgid "Contact"
msgstr "معلومات الاتصال"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:342
msgid "Birthday"
msgstr "عيد الميلاد"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:348
msgid "Spouse's name"
msgstr "اسم الزوج"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Kids' names"
msgstr "أسماء الأطفال"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:359
msgid "Work experience"
msgstr "الخبرات المهنية"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Education"
msgstr "التعليم"

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr "أأحذف هذه المدخلة حقا؟"

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:169 lib/extendedprofilewidget.php:182
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr "(%s)"

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which
#. company does one work for).
#: lib/extendedprofilewidget.php:326 lib/extendedprofilewidget.php:372
msgid "Company"
msgstr "الشركة"

#. TRANS: Field label in extended profile (when did one start a position or
#. education).
#: lib/extendedprofilewidget.php:332 lib/extendedprofilewidget.php:380
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:481
msgid "Start"
msgstr "البدء"

#. TRANS: Field label in extended profile (when did one end a position or
#. education).
#: lib/extendedprofilewidget.php:340 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:490
msgid "End"
msgstr "الانتهاء"

#. TRANS: Field value in experience area of extended profile (one still holds
#. a position).
#: lib/extendedprofilewidget.php:353
msgid "(Current)"
msgstr "الحالية"

#. TRANS: Checkbox label in experience edit area of extended profile (one
#. still works at a company).
#: lib/extendedprofilewidget.php:403
msgid "Current"
msgstr "حالي"

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:420 lib/extendedprofilewidget.php:464
msgid "Degree"
msgstr "الشهادة"

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:423 lib/extendedprofilewidget.php:472
msgid "Description"
msgstr "الوصف"

#. TRANS: Link description in extended profile page to add another profile
#. element.
#: lib/extendedprofilewidget.php:522
msgid "Add another item"
msgstr "أضف عنصرا آخرا"

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:633
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:647
msgctxt "BUTTON"
msgid "Save"
msgstr "احفظ"

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:652
msgid "Save details"
msgstr "احفظ التفاصيل"

#: actions/bio.php:62
#, php-format
msgid "%s's Bio."
msgstr ""

#: GNUsocialProfileExtensionsModule.php:124
msgid "Profile Fields"
msgstr ""

#: GNUsocialProfileExtensionsModule.php:125
msgid "Custom profile fields"
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:78
msgid "Error creating new response."
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:79
msgid "Error creating new field."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic (Egypt) (http://www.transifex.com/gnu-social/gnu-social/language/ar_EG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar_EG\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:52
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit"
msgstr ""

#. TRANS: Title for extended profile settings.
#: actions/profiledetailsettings.php:29
msgid "Extended profile settings"
msgstr ""

#. TRANS: Usage instructions for profile settings.
#: actions/profiledetailsettings.php:40
msgid ""
"You can update your personal profile info here so people know more about "
"you."
msgstr ""

#. TRANS: Client error displayed when the session token does not match or is
#. not given.
#: actions/profiledetailsettings.php:63
msgid "There was a problem with your session token. Try again, please."
msgstr ""

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:74
msgid "Unexpected form submission."
msgstr ""

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:137
msgid "Details saved."
msgstr ""

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:148
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:160
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:273
#, php-format
msgid "Invalid URL: %s."
msgstr ""

#. TRANS: Server error displayed when a field could not be saved in the
#. database.
#: actions/profiledetailsettings.php:522 actions/profiledetailsettings.php:535
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:580
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:622
msgid "Could not save profile."
msgstr "لم يمكن حفظ الملف."

#. TRANS: Server error thrown when user profile settings tags could not be
#. saved.
#: actions/profiledetailsettings.php:630
msgid "Could not save tags."
msgstr "تعذّر حفظ الوسوم."

#. TRANS: Plugin description.
#: ExtendedProfilePlugin.php:40
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfilePlugin.php:87
msgid "More details..."
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:120 lib/extendedprofile.php:131
msgid "Phone"
msgstr ""

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:153 lib/extendedprofile.php:160
msgid "IM"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:181 lib/extendedprofile.php:188
msgid "Website"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:212 lib/extendedprofile.php:224
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:251 lib/extendedprofile.php:264
#: lib/extendedprofilewidget.php:416 lib/extendedprofilewidget.php:456
msgid "Institution"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:289 lib/extendedprofile.php:338
msgid "Personal"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:293
msgid "Full name"
msgstr "الاسم الكامل"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:299
msgid "Title"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:304
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:310
msgid "Location"
msgstr "الموقع"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:315
msgid "Bio"
msgstr "السيرة"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:321
msgid "Tags"
msgstr "الوسوم"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:329
msgid "Contact"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:342
msgid "Birthday"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:348
msgid "Spouse's name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Kids' names"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:359
msgid "Work experience"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Education"
msgstr ""

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr ""

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:169 lib/extendedprofilewidget.php:182
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr ""

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which
#. company does one work for).
#: lib/extendedprofilewidget.php:326 lib/extendedprofilewidget.php:372
msgid "Company"
msgstr ""

#. TRANS: Field label in extended profile (when did one start a position or
#. education).
#: lib/extendedprofilewidget.php:332 lib/extendedprofilewidget.php:380
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:481
msgid "Start"
msgstr ""

#. TRANS: Field label in extended profile (when did one end a position or
#. education).
#: lib/extendedprofilewidget.php:340 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:490
msgid "End"
msgstr ""

#. TRANS: Field value in experience area of extended profile (one still holds
#. a position).
#: lib/extendedprofilewidget.php:353
msgid "(Current)"
msgstr ""

#. TRANS: Checkbox label in experience edit area of extended profile (one
#. still works at a company).
#: lib/extendedprofilewidget.php:403
msgid "Current"
msgstr ""

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:420 lib/extendedprofilewidget.php:464
msgid "Degree"
msgstr ""

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:423 lib/extendedprofilewidget.php:472
msgid "Description"
msgstr "الوصف"

#. TRANS: Link description in extended profile page to add another profile
#. element.
#: lib/extendedprofilewidget.php:522
msgid "Add another item"
msgstr ""

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:633
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:647
msgctxt "BUTTON"
msgid "Save"
msgstr "أرسل"

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:652
msgid "Save details"
msgstr ""

#: actions/bio.php:62
#, php-format
msgid "%s's Bio."
msgstr ""

#: GNUsocialProfileExtensionsModule.php:124
msgid "Profile Fields"
msgstr ""

#: GNUsocialProfileExtensionsModule.php:125
msgid "Custom profile fields"
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:78
msgid "Error creating new response."
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:79
msgid "Error creating new field."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Asturian (http://www.transifex.com/gnu-social/gnu-social/language/ast/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ast\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:52
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit"
msgstr ""

#. TRANS: Title for extended profile settings.
#: actions/profiledetailsettings.php:29
msgid "Extended profile settings"
msgstr ""

#. TRANS: Usage instructions for profile settings.
#: actions/profiledetailsettings.php:40
msgid ""
"You can update your personal profile info here so people know more about "
"you."
msgstr ""

#. TRANS: Client error displayed when the session token does not match or is
#. not given.
#: actions/profiledetailsettings.php:63
msgid "There was a problem with your session token. Try again, please."
msgstr ""

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:74
msgid "Unexpected form submission."
msgstr ""

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:137
msgid "Details saved."
msgstr ""

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:148
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:160
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:273
#, php-format
msgid "Invalid URL: %s."
msgstr ""

#. TRANS: Server error displayed when a field could not be saved in the
#. database.
#: actions/profiledetailsettings.php:522 actions/profiledetailsettings.php:535
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:580
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:622
msgid "Could not save profile."
msgstr ""

#. TRANS: Server error thrown when user profile settings tags could not be
#. saved.
#: actions/profiledetailsettings.php:630
msgid "Could not save tags."
msgstr ""

#. TRANS: Plugin description.
#: ExtendedProfilePlugin.php:40
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfilePlugin.php:87
msgid "More details..."
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:120 lib/extendedprofile.php:131
msgid "Phone"
msgstr ""

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:153 lib/extendedprofile.php:160
msgid "IM"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:181 lib/extendedprofile.php:188
msgid "Website"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:212 lib/extendedprofile.php:224
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:251 lib/extendedprofile.php:264
#: lib/extendedprofilewidget.php:416 lib/extendedprofilewidget.php:456
msgid "Institution"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:289 lib/extendedprofile.php:338
msgid "Personal"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:293
msgid "Full name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:299
msgid "Title"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:304
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:310
msgid "Location"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:315
msgid "Bio"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:321
msgid "Tags"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:329
msgid "Contact"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:342
msgid "Birthday"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:348
msgid "Spouse's name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Kids' names"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:359
msgid "Work experience"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Education"
msgstr ""

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr ""

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:169 lib/extendedprofilewidget.php:182
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr ""

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which
#. company does one work for).
#: lib/extendedprofilewidget.php:326 lib/extendedprofilewidget.php:372
msgid "Company"
msgstr ""

#. TRANS: Field label in extended profile (when did one start a position or
#. education).
#: lib/extendedprofilewidget.php:332 lib/extendedprofilewidget.php:380
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:481
msgid "Start"
msgstr ""

#. TRANS: Field label in extended profile (when did one end a position or
#. education).
#: lib/extendedprofilewidget.php:340 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:490
msgid "End"
msgstr ""

#. TRANS: Field value in experience area of extended profile (one still holds
#. a position).
#: lib/extendedprofilewidget.php:353
msgid "(Current)"
msgstr ""

#. TRANS: Checkbox label in experience edit area of extended profile (one
#. still works at a company).
#: lib/extendedprofilewidget.php:403
msgid "Current"
msgstr ""

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:420 lib/extendedprofilewidget.php:464
msgid "Degree"
msgstr ""

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:423 lib/extendedprofilewidget.php:472
msgid "Description"
msgstr ""

#. TRANS: Link description in extended profile page to add another profile
#. element.
#: lib/extendedprofilewidget.php:522
msgid "Add another item"
msgstr ""

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:633
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:647
msgctxt "BUTTON"
msgid "Save"
msgstr ""

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:652
msgid "Save details"
msgstr ""

#: actions/bio.php:62
#, php-format
msgid "%s's Bio."
msgstr ""

#: GNUsocialProfileExtensionsModule.php:124
msgid "Profile Fields"
msgstr ""

#: GNUsocialProfileExtensionsModule.php:125
msgid "Custom profile fields"
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:78
msgid "Error creating new response."
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:79
msgid "Error creating new field."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Belarusian (Tarask) (http://www.transifex.com/gnu-social/gnu-social/language/be@tarask/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be@tarask\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"

#. TRANS: Link title for link on user profile.
#: actions/profiledetail.php:52
msgid "Edit extended profile settings"
msgstr ""

#. TRANS: Link text for link on user profile.
#: actions/profiledetail.php:54
msgid "Edit"
msgstr "Рэдагаваць"

#. TRANS: Title for extended profile settings.
#: actions/profiledetailsettings.php:29
msgid "Extended profile settings"
msgstr ""

#. TRANS: Usage instructions for profile settings.
#: actions/profiledetailsettings.php:40
msgid ""
"You can update your personal profile info here so people know more about "
"you."
msgstr "Вы можаце абнавіць Вашую асабістую інфармацыю ў профілі, каб людзі даведаліся пра Вас болей."

#. TRANS: Client error displayed when the session token does not match or is
#. not given.
#: actions/profiledetailsettings.php:63
msgid "There was a problem with your session token. Try again, please."
msgstr "Узьнікла праблема з ключом Вашай сэсіі. Калі ласка, паспрабуйце зноў."

#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:74
msgid "Unexpected form submission."
msgstr "Нечаканая адпраўка формы."

#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:137
msgid "Details saved."
msgstr ""

#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:148
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""

#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:160
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""

#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:273
#, php-format
msgid "Invalid URL: %s."
msgstr ""

#. TRANS: Server error displayed when a field could not be saved in the
#. database.
#: actions/profiledetailsettings.php:522 actions/profiledetailsettings.php:535
msgid "Could not save profile details."
msgstr ""

#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:580
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr "Няслушны тэг: «%s»."

#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:622
msgid "Could not save profile."
msgstr "Немагчыма захаваць профіль."

#. TRANS: Server error thrown when user profile settings tags could not be
#. saved.
#: actions/profiledetailsettings.php:630
msgid "Could not save tags."
msgstr "Немагчыма захаваць тэгі."

#. TRANS: Plugin description.
#: ExtendedProfilePlugin.php:40
msgid "UI extensions for additional profile fields."
msgstr ""

#. TRANS: Link text on user profile page leading to extended profile page.
#: ExtendedProfilePlugin.php:87
msgid "More details..."
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:120 lib/extendedprofile.php:131
msgid "Phone"
msgstr ""

#. TRANS: Field label for extended profile properties (Instant Messaging).
#: lib/extendedprofile.php:153 lib/extendedprofile.php:160
msgid "IM"
msgstr "IM"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:181 lib/extendedprofile.php:188
msgid "Website"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:212 lib/extendedprofile.php:224
msgid "Employer"
msgstr ""

#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:251 lib/extendedprofile.php:264
#: lib/extendedprofilewidget.php:416 lib/extendedprofilewidget.php:456
msgid "Institution"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:289 lib/extendedprofile.php:338
msgid "Personal"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:293
msgid "Full name"
msgstr "Поўнае імя"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:299
msgid "Title"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:304
msgid "Manager"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:310
msgid "Location"
msgstr "Месцазнаходжаньне"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:315
msgid "Bio"
msgstr "Біяграфія"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:321
msgid "Tags"
msgstr "Тэгі"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:329
msgid "Contact"
msgstr "Кантакты"

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:342
msgid "Birthday"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:348
msgid "Spouse's name"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:353
msgid "Kids' names"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:359
msgid "Work experience"
msgstr ""

#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:366
msgid "Education"
msgstr ""

#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""

#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr ""

#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:169 lib/extendedprofilewidget.php:182
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr ""

#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which
#. company does one work for).
#: lib/extendedprofilewidget.php:326 lib/extendedprofilewidget.php:372
msgid "Company"
msgstr ""

#. TRANS: Field label in extended profile (when did one start a position or
#. education).
#: lib/extendedprofilewidget.php:332 lib/extendedprofilewidget.php:380
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:481
msgid "Start"
msgstr ""

#. TRANS: Field label in extended profile (when did one end a position or
#. education).
#: lib/extendedprofilewidget.php:340 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:490
msgid "End"
msgstr ""

#. TRANS: Field value in experience area of extended profile (one still holds
#. a position).
#: lib/extendedprofilewidget.php:353
msgid "(Current)"
msgstr ""

#. TRANS: Checkbox label in experience edit area of extended profile (one
#. still works at a company).
#: lib/extendedprofilewidget.php:403
msgid "Current"
msgstr ""

#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:420 lib/extendedprofilewidget.php:464
msgid "Degree"
msgstr ""

#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:423 lib/extendedprofilewidget.php:472
msgid "Description"
msgstr "Апісаньне"

#. TRANS: Link description in extended profile page to add another profile
#. element.
#: lib/extendedprofilewidget.php:522
msgid "Add another item"
msgstr ""

#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:633
#, php-format
msgid "TYPE: %s"
msgstr ""

#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:647
msgctxt "BUTTON"
msgid "Save"
msgstr "Захаваць"

#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:652
msgid "Save details"
msgstr ""

#: actions/bio.php:62
#, php-format
msgid "%s's Bio."
msgstr ""

#: GNUsocialProfileExtensionsModule.php:124
msgid "Profile Fields"
msgstr ""

#: GNUsocialProfileExtensionsModule.php:125
msgid "Custom profile fields"
msgstr ""

#: classes/GNUsocialProfileExtensionResponse.php:78
msgid "Error creating new response."
msgstr ""

#: classes/GNUsocialProfileExtensionField.php:79
msgid "Error creating new field."
msgstr ""