The simplest approach is with glossaries-extra
:
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[xindy]{glossaries-extra}
\makeglossaries
\GlsXtrEnablePreLocationTag{(page }{(pages }
\renewcommand{\GlsXtrFormatLocationList}[1]{#1)}
\newglossaryentry{2D}{name=2D,
description={2 dimensional}}
\newglossaryentry{1D}{name=1D,
description={1 dimensional}}
\newglossaryentry{3D}{name=3D,
description={3 dimensional}}
\begin{document}
Some text about \gls{2D}.
Some text about \gls{1D}.
Some text about \gls{3D}.
\newpage
Some more text about \gls{2D}.
Some more text about \gls{3D}.
\newpage
Some more text about \gls{3D}.
\printglossaries
\end{document}

It's a bit more complicated with just the base glossaries
package:
\documentclass[a4paper]{book}
\usepackage[pagebackref=true,hyperindex=true,hyperfigures=true,pdfduplex=DuplexFlipLongEdge]{hyperref}
\usepackage{datatool}
\usepackage[toc,acronym]{glossaries}
\usepackage[xindy]{imakeidx}
\usepackage{amsmath,amsfonts}
\makeindex
\makeglossaries
\newglossaryentry{2D}{name=2D,
description={2 dimensional}}
\newglossaryentry{1D}{name=1D,
description={1 dimensional}}
\newglossaryentry{3D}{name=3D,
description={3 dimensional}}
\renewcommand*{\glossarypreamble}{%
\label{\currentglossary}%
}
\renewcommand{\glsnumberformat}[1]{%
(\ifthenelse{\DTLisSubString{#1}{\delimN}\OR\DTLisSubString{#1}{\delimR}}%
{pages #1}{page #1})}
\begin{document}
Some text about \gls{2D}.
Some text about \gls{1D}.
Some text about \gls{3D}.
\newpage
Some more text about \gls{2D}.
Some more text about \gls{3D}.
\newpage
Some more text about \gls{3D}.
\printglossaries
\end{document}
The resulting glossary looks like:

(You might want to use nopostdot
so it doesn't insert a full stop after the description. Alternatively, capitalise "page"/"pages". The glossaries-extra
package has nopostdot
as the default.)
To increase the space between the abbreviation and description, you could just use a different style, such as long
, or you can define a new style. For example:
\documentclass[a4paper]{book}
\usepackage[pagebackref=true,hyperindex=true,hyperfigures=true,pdfduplex=DuplexFlipLongEdge]{hyperref}
\usepackage{datatool}
\usepackage[toc,acronym]{glossaries}
\usepackage[xindy]{imakeidx}
\usepackage{amsmath,amsfonts}
\makeindex
\makeglossaries
\newglossaryentry{2D}{name=2D,
description={2 dimensional}}
\newglossaryentry{1D}{name=1D,
description={1 dimensional}}
\newglossaryentry{3D}{name=3D,
description={3 dimensional}}
\renewcommand*{\glossarypreamble}{%
\label{\currentglossary}%
}
\newglossarystyle{mylist}%
{%
\glossarystyle{list}%
\renewcommand*{\glossaryentryfield}[5]{%
\item[\glsentryitem{##1}\glstarget{##1}{##2}]
\hspace*{1cm}##3\glspostdescription\space ##5}%
}
\glossarystyle{mylist}
\renewcommand{\glsnumberformat}[1]{%
(\ifthenelse{\DTLisSubString{#1}{\delimN}\OR\DTLisSubString{#1}{\delimR}}%
{Pages #1}{Page #1})}
\begin{document}
Some text about \gls{2D}.
Some text about \gls{1D}.
Some text about \gls{3D}.
\newpage
Some more text about \gls{2D}.
Some more text about \gls{3D}.
\newpage
Some more text about \gls{3D}.
\printglossaries
\end{document}
The resulting glossary now looks like:
